Недавно я начал разрабатывать для iOS и столкнулся с проблемой, которая, возможно, очевидна для вас, но я не мог понять это сам. То, что я пытаюсь сделать, - выполнить задачу за другим, используя многопоточность, предоставляемую GCD.Выполнение задачи за другим
Это мой код для извлечения JSON (положить в классе с одноплодным) CategoriesStore
- (instancetype)initPrivate {
self = [super init];
if (self) {
[self sessionConf];
NSURLSessionDataTask *getCategories =
[self.session dataTaskWithURL:categoriesURL
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
if (error) {
NSLog(@"error - %@",error.localizedDescription);
}
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse *) response;
if (httpResp.statusCode == 200) {
NSError *jsonError;
NSArray *json =
[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&jsonError];
if (!jsonError) {
_allCategories = json;
NSLog(@"allcategories - %@",_allCategories);
}
}
}];
[getCategories resume];
}
return self;
}
Затем в ViewController исполняет
- (void)fetchCategories {
NSLog(@"before");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
CategoriesStore *categories = [CategoriesStore sharedStore];
dispatch_async(dispatch_get_main_queue(), ^(void) {
_allDirectories = categories.allCategories;
[self.tableView reloadData];
NSLog(@"after");
});
});
}
-fetchCategories выполняются в viewDidAppear. Результат обычно до, после, а затем JSON. Очевидно, что я хочу получить раньше, json после.
Я также попытался сделать это с dispatch_group_notify, но не работал.
Как я могу заставить его работать? Почему он не ждет завершения первой задачи? Спасибо за помощь! С уважением, Адриан.