データのgetterメソッドで配列にデータを非同期的にロードしています。
まず第一に、それは空の配列を生成するので、当然私のテーブルは0行をロードします。
データの読み込みが完了したらreloadData
、テーブルを更新するために呼び出しますが、ダウンロードされるデータと表示されるデータの間に最大6秒のギャップがあるようUITableView
です。
誰かがこれが起こるかもしれない理由を知っていますか?
dispatch_async
優先度の高い方法を使用しています。
データのロードと挿入のプロセスの各ポイントをログに記録しましたが、これが示されています。
また、データが読み込まれているときにテーブルを上下にスクロールし続けると、挿入の間にこのギャップがあるのではなく、テーブルにデータが表示されます。
コード:
- (NSMutableDictionary *)tableDictionary {
if (!_tableDictionary) {
_tableDictionary = [NSMutableDictionary dictionary];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSString *URLString = @"http://www.urlToData.com/path/to/file.php?foo=bar";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLString]];
NSError *error = nil;
NSDictionary *objectIDs = [NSJSONSerialization JSONObjectWithData:data options:NSJSONWritingPrettyPrinted error:&error];
NSMutableDictionary *objects = [NSMutableDictionary dictionary];
for (NSInteger i = 0; i < objectIDs.allValues.count; i++) {
NSArray *eventIDs = (objectIDs.allValues)[i];
NSString *eventType = (objectIDs.allKeys)[i];
[objects setValue:[myObject initWithIDs:objectIDs] forKey:@"key"];
}
self.tableDictionary = objects;
self.titlesForSectionHeader = objects.allKeys;
NSLog(@"Done");
[self.tableView reloadData];
});
}
return _tableDictionary;
}