サーバからデータをロードしていますが、実際にデータがロードされる前にループ(for .. in ..)が終了しています。どのようにメインキュー上の実装ディスパッチを修正するか、別のことを間違えている?ブロック関数ObjCでディスパッチメインキュータスクを修正するには?
[ApiManager getCategoriesifSuccess:^{
[self.sectionArray addObjectsFromArray:[CategoryManager getCats]];
for (CategorySectionModel *mod in [CategoryManager getCats]) {
[self.arrayForBool addObject:@"YES"];
[ApiManager getCatalogItemsInCity:currentCity withSection:mod.uid
andStart:@"1" andLimit:@"20" ifSuccess:^{
[self.itemsArray setObject:[CatalogItemManager getItems] forKey:mod.uid];
[indicator stopAnimating];
[self.tableView reloadData];
NSLog(@"DONE WITH SECTION:%@", mod.title);
} orIfFailed:^(NSString *fail) {
NSLog(@"%@", fail);
}];
NSLog(@"LOOP");
};
} orIfFailed:^{
}];
そして、このコンソールのリターンが、それが正しいではないようだ。
2017-12-24 01:17:57.148355+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.149576+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.150786+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.152773+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.154727+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.156987+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.158840+0300 iOS[75679:1805296] LOOP
2017-12-24 01:17:57.981119+0300 iOS[75679:1805296] DONE WITH SECTION:First
2017-12-24 01:17:58.285569+0300 iOS[75679:1805296] DONE WITH SECTION:Second
2017-12-24 01:17:58.403725+0300 iOS[75679:1805296] DONE WITH SECTION:Third
2017-12-24 01:17:58.434170+0300 iOS[75679:1805296] DONE WITH SECTION:Fourth
2017-12-24 01:17:58.449970+0300 iOS[75679:1805296] DONE WITH SECTION:Fifth
2017-12-24 01:17:58.469519+0300 iOS[75679:1805296] DONE WITH SECTION:Sixth
2017-12-24 01:17:58.535116+0300 iOS[75679:1805296] DONE WITH SECTION:Seventh
質問は特にObjective-Cについてです。 –
私は何も変わっていないようです。 –
@IlyaChikmarev - いいえ、これは重大な変更です。すべてのリクエストがいつ完了したかを知ることが意図されていると想定しています(その時点で、他のアクションを引き起こす可能性があります)。ディスパッチグループを使用するのが正しい方法です(ただし、私はAlexanderがObjective-Cの例をあなたに提供したかったと思いますが)。 – Rob