2013-08-20 2 views
0

많은 추천 및 권장 사항을 거친 후 내 앱에서 SDWebImage 프레임 워크를 구현하려고합니다. 서버에서 이미지를 다운로드 할 수는 있지만 이미지의 크기가 다르기 때문에 호출하는 순서대로 다운로드되지 않습니다. 여기 SDWebImage를 사용하여 이미지로드

가 참조 할 수 있도록 프레임 워크입니다 : 당신이 인쇄 라인에서이 증거를 볼 수있는 https://github.com/rs/SDWebImage

:

-(void)sdWebLoadImages:(NSMutableArray*)imagesURLS{ 

    [_loadedImages removeAllObjects]; 
    NSMutableArray *tempArray = [[NSMutableArray alloc]init]; 
    _loadedImages = tempArray; 
    for (int i=0;i<imagesURLS.count;i++){ 

    [_manager downloadWithURL:[imagesURLS objectAtIndex:i] 
        options:0 
        progress:^(NSUInteger receivedSize, long long expectedSize) 
    { 
     // progression tracking code 
    } 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType,BOOL finished) 
    { 
     if (image && finished) 
     { 

      [_loadedImages addObject:image]; 
      NSLog(@"SD LOAD %i array count = %i",i,_loadedImages.count); 
     } 
    }]; 
    } 
} 

어떻게 : 아래

2013-08-20 11:11:01.785 Project[10785:c07] SD LOAD 1 array count = 1 
2013-08-20 11:11:02.668 Project[10785:c07] SD LOAD 0 array count = 2 
2013-08-20 11:11:02.946 Project[10785:c07] SD LOAD 3 array count = 3 
2013-08-20 11:11:03.306 Project[10785:c07] SD LOAD 2 array count = 4 
2013-08-20 11:11:03.862 Project[10785:c07] SD LOAD 4 array count = 5 
2013-08-20 11:11:04.094 Project[10785:c07] SD LOAD 5 array count = 6 
2013-08-20 11:11:04.793 Project[10785:c07] SD LOAD 6 array count = 7 
2013-08-20 11:11:04.837 Project[10785:c07] SD LOAD 7 array count = 8 
2013-08-20 11:11:05.046 Project[10785:c07] SD LOAD 8 array count = 9 
2013-08-20 11:11:05.428 Project[10785:c07] SD LOAD 9 array count = 10 

내 방법입니다 나는이 문제를 해결했다. (for for loop logic에 뭔가있는가?). 또한 버튼을 클릭 할 때 모든 다운로드를 취소하려고하는데 [_manager cancelAll]을 (를) 사용하고 있지만 작동하지 않는 것 같습니다. 이유가 무엇입니까?

고마워요!

ADDED :

문제 이제 관리자가 어떻게 유지하는 나는 확실하지 1로 setMaxConcurrentOperationCount을 설정 한 후에도 주문이 중단 될 원인, ​​먼저 배열로 캐시 된 모든 이미지를 삽입하는 것입니다 캐시 된 이미지에서도 순서대로 다운로드합니다.

Go to SDWebImageDownloader.m 

난 당신이 최신 SDWebImage 라이브러리를 사용하는 가정입니다 :만큼 얼음으로 간단하고 '저스틴 Amberson'에 의해 지적

+2

이 프레임 워크에 익숙하지 않습니다. NSOperationQueue를 사용하고 있다면 maxOperations = 1이되도록 설정할 수 있습니까? 그렇게하면 일련의 병렬 작업은 실행되지 않지만 대기열에 넣은 순서대로 수행합니다. – Justin

+0

[_manager downloadWithUrl ...]은 내 operationQ에 추가 할 수 있다고 생각하는 작업을 반환하지만 시도 할 때 충돌이 발생하므로이 시점에서 다소 피할 수 있습니다. – royherma

답변

1

. 라인 (72)에

님의

_downloadQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; 

변경을 :

_downloadQueue.maxConcurrentOperationCount = 1; 

그것은 한 번에 하나 개의 이미지를 다운로드합니다.

건배

+0

Thanks Reno! 또한, 그 모든 요청에 ​​대해 이미지로드를 취소하기 위해 [_manager cancelAll]을 호출하면됩니까? – royherma

+0

예 : [[SDWebImageManager sharedManager] cancelAll] :) –

+0

외부에 해당 속성을 노출 할 수있는 기회처럼 보입니다. – Justin

관련 문제