【发布时间】:2023-03-28 10:30:02
【问题描述】:
我想我可能在这里遇到了一个异步问题,这很棘手,因为我认为我已经解决了它。无论如何,我正在做一堆这样的网络服务调用:
//get the client data
__block NSArray* arrClientPAs;
[dataManager getJSONData:strWebService withBlock:^(id results, NSError* error) {
if (error) {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Getting Client Data Error!" message:error.description delegate:nil cancelButtonTitle:NSLocalizedString(@"Okay", nil) otherButtonTitles:nil, nil];
[alert show];
} else {
arrClientPAs = results;
}
}];
而getJSONData是这样的:
- (void) getJSONData : (NSString*) strQuery withBlock:(void (^)(id, NSError *))completion {
NSDictionary* dictNetworkStatus = [networkManager checkNetworkConnectivity];
NetworkStatus networkStatus = [[dictNetworkStatus objectForKey:@"Status"] intValue];
if (networkStatus != NotReachable) {
//set up the url for webservice
NSURL* url = [NSURL URLWithString:strQuery];
NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url];
//set up the url connection
__block id results;
[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:
^(NSURLResponse* response, NSData* jsonData, NSError* error) {
if (error) {
completion(nil, error);
return;
}
results = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments error:&error];
completion(results, nil);
}];
} else {
//not connected to a network - data is going to have to come from coredata
}
}
在第一个块中,如果我记录 arrClientData,我可以看到我期望的数据,但是当我在它之后记录 arrClientData 时,它是 nil。我正在关注这个 SO 线程 - How to return a BOOL with asynchronous request in a method? (Objective-C) 和其他几个。
显然,我正在尝试在进行异步调用后获取数据。任何帮助,将不胜感激。
【问题讨论】:
标签: objective-c asynchronous objective-c-blocks