【发布时间】:2016-04-02 07:24:50
【问题描述】:
我使用 AFNetworking 库已经有一段时间了,但我遇到了一个问题。我使用了以下代码,它使用 GET 函数从远程 PHP 文件接收数据。
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
__block NSDictionary *data = nil;
[manager GET:@"..." parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
data = responseObject;
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
_objects = [[data allKeysForObject:@"type"]mutableCopy];
如您所见,我创建了一个本地 NSDictionary 变量并将其设置为 nil,正如另一个 Stack Overflow 帖子告诉我的那样。在括号内,一切看起来都很好;数据已填充。但是,在括号之外,data 完全是空的。任何想法为什么这可能不起作用?提前致谢。
编辑 正如 matiboo 在 cmets 中所说的那样,我意识到 AFNetworking 运行在与主线程不同的线程上,而主线程恰好在其他所有线程之前执行。
但是,我仍然不知道如何解决这个问题。我应该创建一个函数来处理这个问题吗?
【问题讨论】:
-
您应该阅读 IO 中的队列。块
success和failure在服务器响应数据之后在后台队列中执行。外部 NSLog 在 [manager ....] 命令后立即在主线程中执行。这是关于 IOs 中的线程和队列的相关链接。我认为你应该在使用 AFNetworking 之前先阅读它link -
啊..我明白了。有什么办法可以解决这个问题吗?
-
我不知道你想对从服务器返回的 Json 做什么。如果你需要处理Json返回,通过globar变量保存(我的be是你的_object),写一个函数来处理它。在
success块内,您调用[weakSelf handleData] -
我正在考虑将名为 _objects 的变量(在实现上方的接口块中声明)设置为这个 responseObject
-
我对Objective-C的了解并不多,所以把代码放在一个我应该做的单独函数上会不会太麻烦?
标签: ios objective-c afnetworking