ストーリーボードとJSONを使用してLazyTabelImagesのルーズバージョンを作成しようとしています。メインのTableViewControllerのViewDidLoadで、NSURLConnectionを開始してJSONデータを取得しましたが、接続が完了するまでセルが読み込まれません。LazyTableImagesと同じ動作が必要です。セルは空白として読み込まれますが、情報が入力されます(テーブルデータが再読み込みされます)。LazyTablesはストーリーボードを使用しないため、ストーリーボードを使用しない場合はこれを複製できますが、それはオプションではありません。
私はLazyTableImagesを調べて解決策を見つけようとしましたが、ストーリーボードは(とにかく私にとって)大きな違いを生みます。
セルをブランクとしてロードする簡単な方法はありますか?たとえば、デバイスにインターネットがない場合でも、TableViewを表示したいので、セルにカスタムメッセージを配置します。
コード:
接続を初期化するviewDidLoadの部分...
NSURLRequest *urlrequest = [NSURLRequest requestWithURL:[NSURL URLWithString:serverURL]];
self.dataConnection = [[NSURLConnection alloc] initWithRequest:urlrequest delegate:self];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
connectionDidFinnishLoading..。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//ListData below is an array that my data received (JSON) is loaded into. It is then passed to getTableData.
self.dataConnection = nil;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performSelectorOnMainThread:@selector(getTableData:) withObject:ListData waitUntilDone:YES];
});
}
getTableData..。
-(void)getTableData:(NSData *)jsonData
{
NSError *error = nil;
arrayEntries = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:&error];
for (int x = 0; x < arrayEntries.count; x++)
{
NSMutableDictionary *dic = [arrayEntries objectAtIndex:x];
//ARecord is a class just like in LazyTableImages that creates objects to keep the icons/data together. The ARecords are loaded into the TableView
ARecord *arecord = [[ARecord alloc] init];
NSString *title = [dic objectForKey:@"title"];
NSString *subt = [dic objectForKey:@"subtitle"];
NSString *url = [dic objectForKey:@"image_URL"];
arecord.Icon = nil;
arecord.URL = url;
arecord.Name = title;
arecord.title = subt;
//this is where I load an array full of the arecord objects.
[array addObject:arecord];
}
[self.tableView reloadData];
}