2012-11-22 5 views
-1

테이블 뷰 이름이 "tableAll", 배열 "thumbVideoListArray"(처음에는이 배열이 비어 있습니다.) 이미지의 URL을 가진 배열 "objDelegate.listVidArray"가 있습니다. 실수 체크가 있다고 생각합니다.Tableview 지연로드 문제

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if([thumbVideoListArray count] == 0) 
     { 
      [NSThread detachNewThreadSelector:@selector(fetchImage:) toTarget:self withObject:indexPath]; 
     } 
     else 
     { 
      UIImage *img1 = [thumbVideoListArray objectAtIndex:indexPath.row]; 
      if(img1) 
      { 

       cell.thumbImage = [thumbVideoListArray objectAtIndex:indexPath.row]; 
      } 
      else 
      { 
       [NSThread detachNewThreadSelector:@selector(fetchImage:) toTarget:self withObject:indexPath]; 
      } 
     } 
} 

- (void)fetchImage:(NSIndexPath *)indexPath 
{ 

NSLog(@"in thead"); 

if([[[[objDelegate.listVidArray objectAtIndex:[objDelegate.listVidArray count]-(indexPath.section+1)]valueForKey:@"videoList"]valueForKey:@"media_id"]objectAtIndex:indexPath.row]) 
{ 
    NSData *dataImage = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",[[[[objDelegate.listVidArray objectAtIndex:[objDelegate.listVidArray count]-(indexPath.section+1)]valueForKey:@"videoList"]valueForKey:@"img"]objectAtIndex:indexPath.row]]]]; 


    if([dataImage length]) 
    { 

     UIImage *imageThumb = [UIImage imageWithData:dataImage]; 

     [thumbVideoListArray addObject:imageThumb]; 

     // Reload rows with the fetched image in other thread 
     [self performSelectorOnMainThread:@selector(reloadTable:) withObject:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section]] waitUntilDone:NO]; 
    } 
} 

} 

- (void)reloadTable:(NSArray *)array 
{ 

[tableAll reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone]; 

} 
+1

무엇이 문제입니까? –

+0

fetchImage 메서드를 호출 할 때마다 –

+1

[SDWebImage] (https://github.com/rs/SDWebImage)가 lazyloading을위한 최선의 코드입니다. 쉽고 부드럽게 :) – TheTiger

답변

0

나는 당신이 당신의 viewDidLoad에서 두 절차를 가져올

+0

예, 이제 https://github.com/rs/SDWebImage를 사용할 것입니다. –

0

에서 -tableView : cellForRowAtIndexPath : 셀 객체를 절대 잡지 않습니다. 속성을 설정하기 전에 재사용 가능한 셀을 큐에서 제거해야합니다. 또한 셀을 반환해야합니다.

+0

아니요,하지만 그 이유는 제가 사용하지 않기 때문입니다. 코드의 크기를 늘리십시오 –

+0

그 다음 문제가 무엇인지 설명해 주시겠습니까? 귀하의 질문에 실제로 질문이 포함되어 있지 않습니다 ... –

0

이 대신에, 좋은 방법이 아니므로 일부 수정이 필요, 당신은 무엇을 할 수 있는지, 당신은 그냥 전화를 웹에서 게으른 로딩 이미지 AsyncImageView을 시도 할 수 있다고 생각 또는 viewWillAppear 귀하의 요구 사항에 따라 그 후 그냥 테이블을 다시로드 ... 그리고 더 중요하게 여기 NSOperation을 사용하여 잊지 말고 귀하의 셀로 조정할 수 있도록로드 된 데이터를 태그 ... 희망, 그것은 너의 문제는 ... 내가 여러 번 해왔 던 것처럼.