zoukankan      html  css  js  c++  java
  • AFNetWorking

     

    1 将AFNetWorking文件夹导入项目

    2 添加类库 Security.framework、MobileCoreServices.framework、SystemConfiguration.framework

    3 在使用的地方 #import "AFNetworking.h"

    解决编译时警告:

    1. Prefix.pch文件中加入  
    2. #import <SystemConfiguration/SystemConfiguration.h>  
    3. #import <MobileCoreServices/MobileCoreServices.h>  

    注:AFNetWorking使用了ARC ,在不使用ARC项目中使用时,对AFNetWorking的所有.m文件添加“-fobjc-arc” 

      在使用ARC项目中,使用“不使用ARC”的类库时,对类库的.m文件添加“-fno-objc-arc”


     
    AFNetwork是一个轻量级的网络请求api类库。是以NSURLConnection, NSOperation和其他方法为基础的。

    下面这个例子是用来处理json请求的:
    NSURL *url = [NSURL URLWithString:@"https://alpha-api.app.net/stream/0/posts/stream/global"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSLog(@"App.net Global Stream: %@", JSON);
    } failure:nil];
    [operation start];


    常见问题:
    1. AFNetworking作用都有哪些?
      NSURLConnection提供了+sendAsynchronousRequest:queue:completionHandler:
                                     和+sendAsynchronousRequest:queue:completionHandler: 
    但是AFNetworking提供了更好的功能
    *AFURLConnectionOperation和它的子类继承NSOperation的,允许请求被取消,暂停/恢复和由NSOperationQueue进行管理。
    *AFURLConnectionOperation也可以让你轻松得完成上传和下载,处理验证,监控上传和下载进度,控制的缓存。
    *AFHTTPRequestOperation和它得子类可以基于http状态和内容列下来区分是否成功请求了
    *AFNetworking可以将远程媒体数据类型(NSData)转化为可用的格式,比如如JSON,XML,图像和plist。
    *AFHTTPClient提供了一个方便的网络交互接口,包括默认头,身份验证,是否连接到网络,批量处理操作,查询字符串参数序列化,以及多种表单请求
    *UIImageView+ AFNetworking增加了一个方便的方法来异步加载图像。

    2. AFNetworking是否支持缓存?
    可以,NSURLCache及其子类提供了很多高级接口用于处理缓存
    如果你想将缓存存储再磁盘,推荐使用SDURLCache

    3.如何使用AFNetworking上传一个文件?
    NSData *imageData = UIImagePNGRepresentation(image);
    NSURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock: ^(id formData) {
      [formData appendPartWithFileData:imageData mimeType:@"image/png" name:@"avatar"];
    }];


    4.如何使用AFNetworking下载一个文件?
    先创建一个AFURLConnectionOperation对象,然后再使用它的属性outputStream进行处理
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@"download.zip" append:NO];

    5.如何解决:SystemConfiguration framework not found in project
    请导入:

    #import <SystemConfiguration/SystemConfiguration.h>
    #import <MobileCoreServices/MobileCoreServices.h>



    6.当应用程序退出时,如何保持持续的请求?
    AFURLConnectionOperation有一个叫setShouldExecuteAsBackgroundTaskWithExpirationHandler:的方法用于处理在应用程序进入后台后,进行持续的请求
    [self setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{
    }];



    一些实例:
    1.XML 请求
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://api.flickr.com/services/rest/?method=flickr.groups.browse&api_key=b6300e17ad3c506e706cb0072175d047&cat_id=34427469792@N01&format=rest"]];
    AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
      XMLParser.delegate = self;
      [XMLParser parse];
    } failure:nil];
    [operation start];


    2.图片请求:
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];

    3.图片上传处理,监测上传状态:
    NSURL *url = [NSURL URLWithString:@"http://api-base-url.com"];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
    NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5);
    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock: ^(id formData) {
        [formData appendPartWithFileData:imageData name:@"avatar" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
    }];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
    }];
    [operation start];


    4.在线流媒体请求
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8080/encode"]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.inputStream = [NSInputStream inputStreamWithFileAtPath:[[NSBundle mainBundle] pathForResource:@"large-image" ofType:@"tiff"]];
    operation.outputStream = [NSOutputStream outputStreamToMemory];
    [operation start];
     
    from :http://www.zpluz.com/forum.php?mod=viewthread&tid=2052

    AFNetWorking出现code=-1016错误解决办法

    AFNetWorking的JSON解析默认库是使用的AFJSONRequestOperation模式,只支持text/json,application/json,text/javascript,所以如果出现code=-1016错误则说明当前的JSON解析模式是text/html,所以要加上这段代码:

    [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

    让他支持text/html模式就可以解决了

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/chengfang/p/4191883.html
Copyright © 2011-2022 走看看