У меня есть этот методПытаясь понять асинхронные вызовы
- (NSString*) createUserWithName:(NSString*)TheName
{
NSURL *URL =someUrlthatIncludesTheName
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
NSURLSession *session = [NSURLSession sharedSession];
NSURL *URL = [NSURL URLWithString:url];
NSURLSessionTask *task = [session dataTaskWithURL:URL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (response) {
NSError* error = nil;
NSArray *output = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&error];
myID = [[output objectAtIndex:0] objectForKey:@"UserID"];
}
}];
[task resume];
return myID;
}
и другой метод
-(void)doSomethingWith: (NSString*) anID
Где-то в моем коде, я называю эти методы впоследствии, как это:
[self createUserWithName:@"John"];
[self doSomethingWith:myID];
Однако из-за того, что NSURLSession в createUserWithName:
является асинхронным, doSomethingWith:
увольняется с myID = (null).
Каков наилучший способ приблизиться к этой проблеме, не обязательно возвращаясь к устаревшему синхронному NSURLConnection?
Заранее спасибо
Это происходит потому, что 'createUserWithName' не закончил, а метод' [само doSomethingWith: MyId] 'выполняется. Вы можете вызвать '[self doSomethingWith: myID];' в 'createUserWithName' или использовать CompletionBlock – vroldan