2013-07-05 5 views
-1

이것은 내 첫 번째 질문으로 초보자가되어서 실례합니다.인터넷에서 이미지 가져 오기 CollectionView

인터넷에서 다운로드 한 이미지를 보여주는 CollectionView로 작업하고 있습니다. 문제는 비동기 적으로 시도 할 때 나타납니다.

@interface myViewController 
{ 
    NSArray *ArrayOfSections 
} 
@end 

-(void)viewDidLoad{ 
    [self performSelectorInBackground:@selector(refreshImages) withObject:nil]; 
} 

-(void)refreshImages{ 
    ... //Get information from the net 


    NSArray internetInfo = ...; 

    [self performSelectorOnMainThread:@selector(refreshCollectionView:) withObject:internetInfo waitUntilDone:NO]; 
} 

-(void)refreshCollectionView:(NSArray tempArray){ 

    ArrayOfSections = tempArray; 

} 

이 코드는 작동하지 않습니다. ArrayOfSections에 저장된 정보가 올바른지 이중으로 확인했지만 빈 CollectionView를 보여줍니다.

또한 내가 동기식으로 수행하면 (viewDidLoad 만 변경).

-(void)viewDidLoad{ 
    [self refreshImage]; 
} 

모든 것이 정상적으로 작동합니다. 나는 바나나로 갈거야. 제발 도와주세요

답변

0

나는 당신이 다시로드 컬렉션보기를 말하고있어 때문이라고 생각합니다. 새로 고침 메서드는 모델은 업데이트하지만보기는 업데이트하지 않습니다.

백그라운드 스레드에서 데이터를 가져 오는 경우 주 스레드는 콜렉션 뷰 데이터 소스를 쿼리하고 메소드를 위임 한 다음 뷰를 업데이트하는 라이프 사이클을 계속할 수 있지만 너무 빨리 수행 할 것입니다 모델이 준비되지 않았기 때문에 따라서 데이터 가져 오기가 끝날 때 모델이 준비되면 다시 작업하도록 지시해야합니다. 동기식으로 처리 할 때 스레드를 차단하므로 모형이 준비 될 때까지는 콜렉션보기 메소드에 도달하지 않으므로 이러한 방식으로 작동합니다.

+0

예! 정말 고맙습니다! 비록 스레딩 문제 였지만 collectionView를 다시로드하려고 시도했지만 데이터는 다시로드하지 않았습니다. 열쇠는 [self.collection reloadData]입니다. –