2012-02-06 2 views
0

다음 코드는 cellForRowAtIndexPath 내에 있습니다. 이 코드를 편집해야하는 상황은 다음과 같습니다.비동기 이미지 다운로드

1.) 이미지를 다운로드 할 때 문제가 발생하면 setFailedBlock 블록을 반환해야합니다. 어떻게 코드를 내 코드에 추가 할 수 있습니까?

2.) 이미지를 다운로드하는 동안 사용자가보기를 변경 한 다음이 코드 실행을 중단하고 싶습니다 (다운로드 중지). 나는 내가 블록 viewdiddissapear 또는 viewwilldissapear 방법에 취소를 작성해야한다고 생각. 하지만 다운로드를 취소하는 코드를 작성하는 방법을 모르겠습니다. 누군가 이걸하는 방법을 보여줄 수 있습니까?

: 당신이있는 NSURLConnection을 사용하는 경우

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
//this will start the image loading in bg 
dispatch_async(concurrentQueue, ^{   
    NSData *someimageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:someimageURL]];   
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [cell.imageviewofsomeimage setImage:[UIImage imageWithData:someimageData ] ]; 
    }); 
}); 

답변

1

을 (주는 cellForRowAtIndexPath 방법이 너무 viewdiddissapear 또는 viewwilldissapear에서 액세스 할 필요가 내부에이 블록이다),이 클래스가 cancel

AsyncURLConnection discussion

+0

ISN ' 그곳에는 자기 자신을 차단하는 해결책이 없습니다. 'setFailedBlock'을 설정하는 것과 같은가? – Illep

+0

@Ilelep : 블록은 마법의 총알이 아닙니다. 적절한 곳에서 사용하십시오. 처음에는 블록 친화적 인 방법을 취소 할 수 없기 때문에 이것은 적절한 장소처럼 보이지 않습니다. – JeremyP

+0

@JeremyP 그렇다면 올바른 방법은 무엇입니까? 적절한 해결 방법 – Illep

관련 문제