【发布时间】:2015-11-27 14:21:58
【问题描述】:
我是 Objective-C 的新手,只是想知道如何在 JSON 之外使用 NSArray 对象。
例如:
NSURL *url = [NSURL URLWithString:@"http://acumen-locdef.elasticbeanstalk.com/service/countries"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSMutableArray *myFinalListArray = [[NSMutableArray alloc] init];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError)
{
if (data.length > 0 && connectionError == nil)
{
NSMutableArray *greeting = [NSJSONSerialization JSONObjectWithData:data
options:0
error:NULL];
for (NSDictionary *countryList in greeting) {
[myFinalListArray addObject:countryList[@"name"]];
}
}
NSLog(@"%@",myFinalListArray); //(This one showing all results..)
}];
NSLog(@"%@",myFinalListArray); //(This one giving empty result)
我已经定义了 myFinalListArray 并在 for 循环中添加了对象。
如果您在循环内或循环外使用NSLog,它将显示结果。但是如果我在}]; 之后使用它(在代码结束之后),
它给了我一个空数组。
【问题讨论】:
-
因为 sendAsynchronousRequest 在单独的线程上运行,并且您可以看到它正在使用块。 myFinalListArray 填充在块内。
-
里面的代码是异步调用的。因此,当您在异步请求下方调用 NSLog 时,请求可能尚未完成。您必须等到异步调用完成。
-
非常感谢您的帮助,有什么可能的解决方案吗?其实我真的很想在外面用这个?
-
您需要了解异步的含义以及它是如何在Objective-C项目中实现的。只有你能做到。
-
块在第二个执行这就是为什么你得到空值
标签: ios objective-c json