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

AFNetworking 的问题

如何在 AFNetworking 中发布像 "register_id":"3" 这样的参数

JSON + AFNetworking [关闭]