2013-07-03 2 views
0

UICollectionView를 통해 이미지 갤러리를 사용하고 싶습니다. 배열에 이미지 URL 세트가 있는데, 약 20-30 개의 URL이 있습니다. SDWebImageManager를 사용하여 이미지를 다운로드하고 캐시하고 콜렉션 뷰에 표시합니다.iOS의 SDWebImageManager를 사용하여 원격 서버에서 이미지를 다운로드 할 수 없습니다.

for(int i=0;i<[imagePath count];i++) { 

    [manager downloadWithURL:[NSURL URLWithString:[imagePath objectAtIndex:i]] options:0 progress:^(NSUInteger receivedSize, long long expectedSize) { 

    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { 

     if(image){ 
      NSLog(@"SUCCESS"); 
      NSString *localKey = [NSString stringWithFormat:@"Item-%d", i]; 
      NSLog(@"%@",localKey); 
      [[SDImageCache sharedImageCache] storeImage:image forKey:localKey]; 
     } 

    }]; 
} 

그것이 않는 모든, URL 링크 내 IMAGEPATH 배열에 0을 인덱스와 셀의 나머지 빈 남아있는 첫 번째 이미지를 표시 :

아래 내 코드를 참조하십시오. 인쇄를 시도하면 SUCCESS가 한 번만 표시되고 Item-0 만 표시됩니다. 나는 더 이상 가지 않을 것 같다. 그것은 단지 하나의 이미지 (배열의 첫 번째 URL의 이미지)를 다운로드합니다. 이걸 도와주세요. 나는 오랫동안 이것에 대한 나의 머리를 어 기고있다. 나는 옳은 길에 있는지 잘 모르겠다. 또는 배열에 저장된 여러 개의 URL을 통해 이미지 갤러리를 얻는 다른 방법을 제안 해주세요.

+0

대신 'UIImageView + WebCache' 이미지보기 카테고리를 사용하면 이미지 캐싱도 가능합니다. 사용법은 여기에서 찾을 수 있습니다 (https://github.com/rs/SDWebImage#using-uiimageviewwebcache-category-with-uitableview) – Amar

+0

답장을 보내 주셔서 감사합니다.예, UIImageView + WebCache를 사용했지만 작동하지 않습니다. 단지 하나의 이미지 만로드합니다. – Uday

답변

0

cellForItemAtIndexPath 님이 무엇을하고 있는지 궁금합니다. 캐시에서 이미지를 직접 검색하려고하는 경우 위의 코드가 비동기 적으로 실행되고 있으므로 cellForItemAtIndexPath이 캐시에서 이미지를 검색하려고 시도 할 때 이미지가 아직 다운로드되지 않은 상태에서 설명하는 동작을 정확하게 볼 수 있습니다.

저는 개인적으로 캐시를 미리 채우려 고 노력하지 않으셔도 좋습니다. 그냥 cellForItemAtIndexPathUIImageView+WebCache 카테고리 방법 setImageWithURL을 사용하고 귀하의 질문에 for 루프를 모두 제거하십시오. 자동으로 캐시가 채워지고 누락 된 이미지 문제가 사라집니다.

이미지를 검색하는 데 문제가있는 경우 NSError 객체를 블록으로 다시 전달하는 SDWebImage 메서드 중 하나를 사용해야합니다. 예 :

[cell.imageView setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
    if (error) 
     NSLog(@"%s: setImageWithURL error: %@", __FUNCTION__, error); 
}]; 

URL 주소가 유효하지 않은 경우 404 오류가 표시 될 수 있습니다. 당신이 당신의 for 루프, 다른 생각의 몇 가지 사용하기로 경우


: BTW

  1. 을, 당신은 imagenil 않은 경우에만 로그인 할 수 있습니다. if 문에 대한 else 문이 실패 할 수 있습니다 (예 : error 개체가 흥미로운 것을 알려줄 수 있음). API가 error 객체를 제공하면 객체를 사용해야합니다.

  2. 다운로드 한 이미지를 가져 와서 다른 키로 캐시에 추가하는 것은 조금 궁금합니다. 이제 캐시에 이미지 사본이 2 개 있습니다. 이는 공간을 낭비하는 것입니다. 이미지를 다운로드하면 이미 캐시에 저장되어 있으며 동일한 URL을 사용하여 이미지를 다시 가져 오려고하면 캐시에서 이미지를 가져옵니다. 자체 키를 사용하여 캐시에 다른 항목을 만드는 것은 의미가 없습니다.

  3. progress 블록을 사용하지 않으려는 경우 해당 매개 변수에 nil을 전달하면됩니다.

+0

답장을 보내 주셔서 감사합니다. 나는 UIImageView + WebCache를 시도했다. 그 도움의. 즉 배열의 첫 번째 URL에서 하나의 이미지가 계속 표시됩니다. 20-30 개의 이미지를 모두 다운로드하는 데 시간이 걸릴 수 있습니다. 모든 URL이 다릅니다. 그 같은 URL 경로가 아닙니다. – Uday

+0

@Uday 두 가지 방법으로 이미지를 전송하는 데 문제가있는 경우 URL에 문제가있는 것 같습니다. 예를 들어 Mac OS X은 대소 문자를 구분하지 않지만 많은 웹 서버가 있으므로 대소 문자가 일치하지 않을 수 있습니다. 나는 URL을 보지 않고 말할 수 없다. 그러나 rendition을 'completed'블록과 함께 사용하면 문제의 원인을 더 잘 진단 할 수 있습니다. 내 수정 된 답변을 참조하십시오. – Rob

+0

Error Domain = NSURLErrorDomain Code = -1100 "작업을 완료 할 수 없습니다 (NSURLErrorDomain 오류 -1100)." – Uday

관련 문제