AFNetworking 和 id reponseObject 不工作且无法恢复内容
Posted
技术标签:
【中文标题】AFNetworking 和 id reponseObject 不工作且无法恢复内容【英文标题】:AFNetworking and id reponseObject NOT working and not able to recover the content 【发布时间】:2014-05-30 14:49:31 【问题描述】:经过几天的工作我无法解决这个问题,我真的需要你的帮助,因为我完全被锁定了,我开始发疯了!!!!!!。我在 ios 的 Objective c 中有一个项目,我从服务器获取数据以放入我的应用程序。我在从 JSON 中恢复和保存数据时遇到了一些麻烦。
我想使用“id responseObject”,并在我的项目的另一个区域保存和使用内容。每次我尝试使用以下方法并在“setCompletionBlockWithSucess”之外使用“id responseObject”时,“id responseObject”为(null),我该怎么办?
NSURL *URL = [NSURL URLWithString:@"…."];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"JSON: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
[[NSOperationQueue mainQueue] addOperation:op]
【问题讨论】:
这个问题语法错误 【参考方案1】:听起来你不太明白scope
是什么变量。如果是这样的话,这个项目对你来说可能太先进了。我敦促您阅读范围 + 块以更好地了解正在发生的事情。
setCompletionBlockWithSuccess
实际上是一个代码块,如果 URL 请求成功则执行。这意味着responseObject
不会立即执行!它会在一段时间后被传回,您可以在setCompletionBlockWithSuccess
中访问它。所以这就是为什么它在块之外是 nil。
做你想做的事非常简单。您需要在setCompletionBlockWithSuccess
中读取responseObject
并将其设置为您有权访问的另一个变量。或者您可以立即将其发送到另一个类进行解析/保存。
我尚未对其进行测试,但我相信这应该适用于简单的 JSON 响应。如果没有,请改用operation.responseString
NSString *jsonResponse;
NSURL *URL = [NSURL URLWithString:@"…."];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"JSON: %@", responseObject);
jsonResponse = responseObject;
...
【讨论】:
非常感谢您的回答非常感谢您的即时回答。这对我来说更清楚,我发送了变量并在另一个类中解析它,它就像一个魅力!正如你建议我的那样,我将更深入地研究这部分 Objective C 编程,即 sope+blocks以上是关于AFNetworking 和 id reponseObject 不工作且无法恢复内容的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 和 id reponseObject 不工作且无法恢复内容
AFNetworking 使用 Rails 进行 PUT 和删除
HttpHttpServletRequest / Reponse