我对 iOS 中的 Web 服务调用和线程有点陌生。我的ViewController
应用中有一个包含 tableview 控件的应用程序。我正在使用通过 JSON Web 服务获得的数据填充表。JSON Web 服务在其自己的线程上调用,在此期间我填充一个NSArray
and NSDictionary
.
我的数组和字典似乎超出了范围,因为我的NSLog
语句为数组计数返回零,即使在fetchedData
数组中已完全填充。
有人可以解释为什么我的数组和字典对象在线程之外是空的吗?
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *serviceEndpoint = [NSString stringWithFormat:
@"http://10.0.1.12:8888/platform/services/_login.php?un=%@&pw=%@&ref=%@",
[self incomingUsername], [self incomingPassword], @"cons"];
NSURL *url = [NSURL URLWithString:serviceEndpoint];
dispatch_async(kBgAdsQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
NSLog(@"ARRAY COUNT: %d\n", [jsonArray count]);
}
-(void)fetchedData:(NSData*)responseData{
NSError *error;
jsonDict = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
jsonArray = [[jsonDict allKeys]sortedArrayUsingSelector:@selector(compare:)];
for(NSString *s in jsonArray){
NSLog(@"%@ = %@\n", s, [jsonDict objectForKey:s]);
}
}