2012-09-18 4 views
0

그래서 NSCollectionView에 노래 목록이 있습니다. NSCollectionView가 나타내는 내가 그 배열을 업데이트 할 때 일반적으로 UI는 그 변화를 반영dispatch_async를 사용할 때 NSCollectionView UI가 업데이트되지 않습니다.

사진 : http://cl.ly/image/1D3A1o192k3W 코드

:

[self setCurrentPlaylist:[HMRequest playlistPopular3Day]]; 

(참고 : _currentPlaylist는 배열, [HMRequest playlistPopular3Day] 노래의 배열을 반환)

하지만 내가 갑자기 UI를 사용하면 dispatch_async을 사용하려고합니다. NSCollectionView의 보이는 부분은 업데이트되지 않지만 아래로 스크롤하면 이전에 숨겨진 부분이 올바르게 업데이트됩니다. http://cl.ly/image/3y0f212Y3W3S

코드 :

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(aQueue, ^{   
    [self setCurrentPlaylist:[HMRequest playlistPopular3Day]]; 
}); 

사진 (나는 조금 스크롤 한, 빈 흰색 이전에 볼 수 무엇이며, 노래는 숨겨진 스크롤 뷰의 일부) 빈 UI 섹션을 피하는 데 도움이 되셨습니까?

답변

1

AppKit의 대부분은 스레드 세이프가 아니므로 메인 스레드에서만 백그라운드 업데이트가 아닌 UI 업데이트를해야합니다. 또한 실제로는 NSCollectionView을 사용하고 싶지 않고 성능면에서 훨씬 빠른 NSTableView을 사용하려는 것처럼 보입니다.

+0

좋아, 그거 지워. 고마워요, 진짜 빠르 네요. NSTableView 대신에'NSCollectionView'를 사용할 때의 예가 무엇입니까? –

+0

@AlexMarchant 나는 그것이 보이지 않을지라도, 한번에 모든 뷰를 생성한다는 사실 때문에 결코'NSCollectionView'를 사용하지 않을 것입니다. 하지만 여러 열에 내용을 표시 할 필요가있을 때 (부끄러운 셀프 플러그) JUCollectionView와 같은 대안을 사용할 것입니다. – JustSid

+0

고맙습니다. JUCollectionView, github 살펴 보겠습니다. –

관련 문제