AFNetworking 2.0上周宣布.但我发现AFNetworking 2.0有不同的要求.
README.md告诉它需要iOS 7.0及更高版本,而AFNetworking 2.0迁移指南告诉它需要iOS 6.0及更高版本.
剂量AFNetworking 2.0支持iOS 6.0?
将我的项目更新为AFNetworking,Xcode显示此错误:
@property (nonatomic, strong) dispatch_queue_t completionQueue;
Run Code Online (Sandbox Code Playgroud)
具有' retain or strong'属性的属性必须是对象类型.
我无法理解为什么官方示例没有错误警告?
我正在尝试将AFNetworking 2.0与NSURLSession一起使用.我正在使用这种方法
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
fromFile:(NSURL *)fileURL
progress:(NSProgress * __autoreleasing *)progress
completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;
Run Code Online (Sandbox Code Playgroud)
我该如何使用progress参数.该方法是一种非阻塞方法.因此,我将不得不听' progress'来获取更新.但参数不会占用属性.只接受局部变量(NSProgress*__autoreleasing*).我无法将KVO添加到本地var.
我不太确定如何使用.
我正在尝试使用AFNetworking 2.0来执行我的网络请求,但我遇到了一些奇怪的行为.我按照文档中的建议进行了子类化AFHTTPSessionManager,并提供了一个类方法,该方法返回一个单例对象,该对象具有基本URL设置以及设置我的auth标头.
+ (id)sharedInstance {
static dispatch_once_t once;
static MyHTTPClient *sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] initWithBaseURL: NSURLURLWithString:kPlatformAPIBaseURL]];
});
//Uncommenting this line makes the error go away
//sharedInstance.responseSerializer = [AFJSONResponseSerializer serializer];
//get latest session id everytime someone gets an instance of the client
sharedInstance.sessionId = [MySessionManager getSessionId];
return sharedInstance;
}
- (instancetype)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if(self) {
self.sessionId = [FSSessionManager getSessionId];
self.serializer = [AFHTTPRequestSerializer serializer];
[_serializer setValue:_sessionId forHTTPHeaderField:kAuthorizationHeader];
[_serializer setValue:@"application/json" forHTTPHeaderField:kAcceptHeader];
self.requestSerializer …Run Code Online (Sandbox Code Playgroud) 我也需要向我的服务器发帖子请求.
使用AFHTTPRequestOperation非常简单,只需使用:
[request setHTTPBody: [requestBody dataUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何使用AFHTTPSessionManager使用相同方法的示例.
使用方法:
[self POST:@"extraLink" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
} success:^(NSURLSessionDataTask *task, id responseObject) {
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
Run Code Online (Sandbox Code Playgroud)
我如何将主体添加到"AFMultipartFormData"?
谢谢你的推荐
我不明白为什么这么难.在线的所有教程和文章似乎都在谈论1.0 api,这是非常没用的.
我尝试了几种不同的方法,得到了不同的结果.我究竟做错了什么?
上传任务 - 这似乎不是使用多部分形式,wtf?
NSMutableURLRequest *request = [self.manager.requestSerializer multipartFormRequestWithMethod:@"POST"
URLString:[[NSURL URLWithString:url relativeToURL:[NSURL URLWithString:ApiBaseUrl]] absoluteString]
parameters:@{}
constructingBodyWithBlock:nil];
NSProgress *progress;
NSURLSessionUploadTask *task = [self.manager uploadTaskWithRequest:request
fromData:data
progress:&progress
completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"[error description] = %@", [error description]);
} else {
NSLog(@"success!");
}
}];
[task resume];
Run Code Online (Sandbox Code Playgroud)发布一个块 - 这似乎没有附加任何东西
[self.manager POST:url
parameters:@{}
constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
[formData appendPartWithFileData:data
name:@"post[picture]"
fileName:@"picture.jpg"
mimeType:@"image/jpeg"];
}
success:^(NSURLSessionDataTask *task, id response) {
NSLog(@"Success");
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: …Run Code Online (Sandbox Code Playgroud)我试图避免在这里问这样一个新问题,但我是一个学习IOS的Android开发者,我无法弄清楚如何使用AFNetworking 2.0为我的帖子请求添加一个简单的标题.下面是我的代码到目前为止,如果我想提出一个不需要标题的请求,有效.有人可以通过添加到我的代码段或提供替代方案来显示这个吗?我遇到了这个问题:http ://www.raywenderlich.com/30445,它显示了如何在"A RESTful Class"标题下添加标题,但是它用于afnetworking 1.0,现在我已经折旧了.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"uid": @"1"};
AFHT
[manager POST:@"http://myface.com/api/profile/format/json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"JSON: %@", responseObject);
self.feedArray = [responseObject objectForKey:@"feed"];
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
} ];
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试找出使用AFNetworking 2.0对大量GET请求进行分组或批处理的最佳做法.所有GET请求都需要在代码可以继续之前完成,但它们不必一个接一个地运行.现在对于单个请求,我正在使用AFHTTPRequestOperationManager(另见此处:子类AFHTTPRequestOperationManager?).
这里描述了一种可能性,使用dispatch_group:如何使用AFNetworking 2批量请求?,但那是为了AFHTTPSessionManager,这只是iOS7.我的应用程序仍然针对iOS6,所以我需要使用AFHTTPRequestOperationManager.
是否正在使用dispatch_group?或者AFNetworking内置了一些我忽略并可以用于此的内容?
编辑:仍然不知道正确的方法是什么...例如,我如何使用组AFHTTPRequestOperation?
我尝试了以下内容,但在所有响应进入之前,最终会首先显示最终的NSLog("完成搜索"):
dispatch_queue_t dispatch_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t dispatch_group = dispatch_group_create();
for (Entry *e in self.entries)
{
dispatch_group_async(dispatch_group, dispatch_queue, ^{
NSString *queryString = [e getQueryString];
NSURL *URL = [NSURL URLWithString: queryString];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFHTTPResponseSerializer serializer];
operation.completionGroup = dispatch_group;
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:nil];
[operation start];
});
} …Run Code Online (Sandbox Code Playgroud) 所以,我使用AFNetworking 2.0(带有Bridging-Header的ObjC框架)在本地服务器上发出一些请求.我已经按照一些教程使用Swift对其进行编码.这是代码:
var success = { (operation:AFHTTPRequestOperation!, response:AnyObject!) -> Void in
println(response.description)
successBlock(result:response.description)
}
var failure = { (operation:AFHTTPRequestOperation!, response:NSError!) -> Void in
println(response.description)
errorBlock(error:response.description)
}
var manager = AFHTTPRequestOperationManager()
manager.responseSerializer = AFJSONResponseSerializer();
manager.GET("http://127.0.0.1:8080/api/manufacturer", parameters: nil, success: success, failure: failure)
Run Code Online (Sandbox Code Playgroud)
它检索json并成功打印.响应是这样的:
(
{
"_id" = 539f0973e3c7f4ab1f6078f5;
name = Manufacturer01;
},
{
"_id" = 539f18c5e3c7f4ab1f6078f6;
name = Manufacturer02;
}
)
Run Code Online (Sandbox Code Playgroud)
但是,我无法解析它...我试图response[0]获得第一个元素,但是当我尝试时它会崩溃模拟器甚至是Xcode6 : (lldb) > po response[0]. 我尝试了一切,我看到的每个例子都解释了如何打印结果,但没有解析每个字段.
response当我尝试调试它时,对象看起来像这样:
value = Some {
Some = (instance_type = Builtin.RawPointer …Run Code Online (Sandbox Code Playgroud) 我正在为受OAuth2保护的服务器编写一个小型iOS客户端.
我想知道是否可以使用AFOAuth2Manager[here]自动刷新过期的令牌.
这个想法是当服务器用401响应时刷新客户端的逻辑,或者当刷新方法返回401时引发错误的逻辑应该是很常见的,所以可能它集成在某个库中.
afnetworking-2 ×10
ios ×9
afnetworking ×6
objective-c ×3
header ×1
http-headers ×1
ios7 ×1
iphone ×1
json ×1
oauth-2.0 ×1
swift ×1