私はiOSでのWebサービスの呼び出しとスレッド化が初めてです。ViewController
テーブルビュー コントロールを含むアプリを持っています。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]);
}
}