我試圖在tableview中放入正確返回的JSON的結果。 問題是我只能訪問返回信息的塊內的數據,甚至將結果分配給實例變量。 我的代碼如下:目標C - JSON數據在正確返回後不可用
NSURL *url = [NSURL URLWithString:@"http://www.my_url.com.br/app/?type=list&info=15,16&lat=some_data&long=some_data"];
ASIHTTPRequest *_request = [ASIHTTPRequest requestWithURL:url];
ASIHTTPRequest *request = _request;
request.requestMethod = @"POST";
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request setDelegate:self];
[request setCompletionBlock:^{
NSString *responseString = [request responseString];
NSLog(@"Response: %@", responseString);
NSDictionary *root = [NSJSONSerialization JSONObjectWithData:request.responseData options:0 error:nil];
self.data = [root objectForKey:@"listing"];
NSLog(@"Data returned: %@", data); //Everything works well. The data returned is printed correctly
}];
[request setFailedBlock:^{
NSError *error = [request error];
NSLog(@"Error: %@", error.localizedDescription);
}];
[request startAsynchronous];
NSLog(@"Data only: %@", data); //At this point, the "data" content is nil
這是我的 「ListDataController.h」 文件定義:
@interface ListDataController : UITableViewController{
ApplicationCell *tmpCell;
NSArray *data;
UILabel *status ;
UINib *cellNib;
}
@property (nonatomic, retain) IBOutlet ApplicationCell *tmpCell;
@property (nonatomic, retain) NSArray *data;
的JSON返回: 數據自:( { 圖標=「Baseball.png 「; Name = Baseball; NumRatings = 106; Price =」$ 2.98「; Publisher =」Super Sportz,Inc.「; Rating =」3.5「; }, { Icon =「Checkers.png」; 名稱=跳棋; NumRatings = 87; 價格=免費; Publisher =「Gameitoids,Inc.」; 評分= 4; } )
問題是:爲什麼我不能訪問塊外的實例變量「data」,甚至將它分配給json的結果呢?
我已經注意到了這一點,通過分析日誌和毫秒的操作,但不明白爲什麼發生。感謝澄清。 但我該如何解決這個問題?我需要應用程序等待JSON的返回,然後將其分配給將由tableview使用的變量。 – Lano 2013-03-13 15:05:12
是的,你可以在完成塊中做到這一點 – 2013-03-13 15:09:10
你可以通過同步請求數據來解決這個問題。你不希望這樣做,因爲那時你的應用程序將凍結在這一點上,直到最終收到數據。在某些情況下可能需要很長時間(直到ip超時)。 – 2013-03-13 15:10:26