gpt4 book ai didi

ios - AFNetworking 和 id reponseObject 不工作并且无法恢复内容

转载 作者:行者123 更新时间:2023-11-29 02:55:25 27 4
gpt4 key购买 nike

经过几天的工作,我无法解决这个问题,我真的需要你的帮助,因为我完全被锁定了,我开始发疯了!!!!!!。我在 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]

最佳答案

听起来你不太明白什么是scope变量。如果是这样的话,这个项目对你来说可能太高级了。我强烈建议您阅读 scope + blocks 以更好地了解正在发生的事情。

发生的事情是 setCompletionBlockWithSuccess 实际上是一段代码,如果 URL 请求成功就会执行。这意味着 responseObject 不会立即执行!它会在一段时间后传回,您可以在 setCompletionBlockWithSuccess 中访问它。所以这就是为什么它在 block 外为零。

做你想做的事非常简单。您需要读取 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;
}

...

关于ios - AFNetworking 和 id reponseObject 不工作并且无法恢复内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com