스토리 보드 및 JSON을 사용하여 느슨한 버전의 LazyTabelImages를 만들려고합니다. 내 주 TableViewController의 ViewDidLoad에서 NSURLConnection을 시작하여 JSON 데이터를 가져 오지만 연결이 완료 될 때까지는 셀이로드되지 않습니다. LazyTableImages와 동일한 동작을 원한다. 셀이 공백으로로드되지만 정보를 채운다. (테이블 데이터를 다시로드한다.) LazyTables가 스토리 보드를 사용하지 않기 때문에 스토리 보드를 사용하지 않으면 복제 할 수 있지만 옵션이 아닙니다.iPhone - NSURLConnection이 완료되기 전에 UITableViewCells가보기로드에 표시되게하십시오.
나는 해결책을 찾기 위해 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];
}
메인 스레드에서 네트워크를 호출 했습니까? 네트워킹 블록 UI 스레드. – jessex
GCD를 사용하여 주 스레드에서 이동하려고했지만 테이블이로드되지 않으므로 흰색 화면 만 표시됩니다. 다른 스레드에서 JSON 구문 분석을 처리하기 위해 NURLConnection에 GCD 호출이 있습니다. – Siriss
NSURLConnection은 이미 비동기 적이어야합니다. 그것을 백그라운드 스레드로 옮기는 것은 나쁜 생각 일 수 있습니다.Quinn이 말했듯이 네트워킹은 "Threads Are Evil ™"과 관련이 있습니다. – jemmons