2011-12-31 3 views
0

내가 네 사진을 포함하고 내가 웹에서이 사진을 얻을하지만 난이 사진이 enter image description here사진을 다운로드하면 어떻게 저장할 수 있습니까?

다시 다운로드하는 jQuery과 아래로 스크롤 할 때 문제가 그리고이 코드입니다있는 UITableViewCell이 있습니다

 ITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellPhoto"]; 

if (cell == nil) { 

    NSArray *nibObject = [[NSBundle mainBundle] loadNibNamed:@"CustomCellThumbnails" owner:self options:nil]; 
    cell = [nibObject objectAtIndex:0]; 
} 

// Get the photos 
int getPhotos = indexPath.row * 4; 

for (int i = 1; i <= 4; i++) { 

    if (getPhotos < [imageArray count]) 
    { 
     UIButton *imageButton = (UIButton*)[cell viewWithTag:i]; 
     NSString *url = [imageArray objectAtIndex:getPhotos]; 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.siteweb.com%@",url]]]; 
      UIImage *imageFieldProfile = [[UIImage alloc] initWithData:imageData]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       // Set the phoyo to the UIButton 
       [imageButton setBackgroundImage:imageFieldProfile forState:UIControlStateNormal]; 
       [imageFieldProfile release]; 
       // Set the corner of UIButton 
       [imageButton.layer setCornerRadius:5.0]; 
       [imageButton.layer setMasksToBounds:YES]; 
       imageButton.tag = getPhotos; 
      }); 
     }); 

     [imageButton addTarget:self action:@selector(displayPhoto:) forControlEvents:UIControlEventTouchUpInside]; 

    }   
    getPhotos ++; 
} 

답변

1

UITableViewCell이 아닌 셀을 채우려면보기 컨트롤러를 사용해야합니다. 그렇게하면 더 나은 코딩 스타일 일뿐만 아니라 데이터를 저장하는 것이 더 쉽습니다. 당신은 당신이 다운로드 한 데이터를 저장할 수 있도록 스토리지 테이블의 일종으로있는 UITableViewCell을 초기화 : 당신이 정말로해야하는 경우

어쨌든, 다시 initWithStyle:reuseIdentifier:usingCacheTable:

initWithStyle:reuseIdentifier:를 다시 작성하지만,이 작업을 수행하는 올바른 방법입니다 보기 컨트롤러에 데이터를로드하고 UIView 하위 클래스가 단순히 물건 만 표시하도록합니다.

+0

하지만 난 initWithStyle와있는 UITableViewCell 만드는 방법 펜촉 파일에 사용자 지정있는 UITableViewCell이있는 경우 : reuseIdentifier : usingCacheTable : –

+0

아무 생각 - 속성으로 추가하고 '사용을 고려 [세포 setMyCache을 :]'대신. –

0

이미지를 다운로드 할 때 테이블 뷰 셀이 아닌 다른 개체에 저장하거나 캐시해야합니다. 아마도 테이블 뷰 셀이 직접 URL 요청을하는 대신 테이블 뷰 셀이 이미지를 요청하는 일종의 데이터 소스 나 모델 객체를 사용했을 것입니다. 그런 다음 모델 객체는 다운로드 한 후 셀로 전달하기 전에 이미지를 캐시 할 수 있습니다.

0

로컬 캐싱과 결합하여 지연로드 이미지보기 조합을 사용할 수 있습니다. ASIHTTPRequest를 올바르게 설정 캐싱 플래그와 함께 사용하면 쉽게 달성 할 수 있습니다.

ASIHTTPRequest는 사용하기가 매우 쉽고 캐싱이 매우 잘 제어됩니다.

제안 된 다른 솔루션과 달리 UITableView과 그 UITableViewCells을 사용하면 이러한 로직을 직접 만들 필요없이 대기열에 넣지 않고 셀을 사용할 수 있습니다.

저는 (2mio 다운로드 이상) 주요 뉴스 매거진 앱에 이러한 솔루션을 사용했으며 그 결과에 완전히 만족합니다.

관련 문제