0

所以我有一个包含歌曲列表的 NSCollectionView。当我更新 NSCollectionView 通常代表的数组时,UI 会反映该更改:

图片:http ://cl.ly/image/1D3A1o192k3W

代码:

[self setCurrentPlaylist:[HMRequest playlistPopular3Day]];

(注:_currentPlaylist 为数组,[HMRequest playlistPopular3Day]返回歌曲数组)

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 部分吗?

4

1 回答 1

1

AppKit 的大多数部分都不是线程安全的,因此您应该只在主线程上而不是在后台线程上进行 UI 更新。此外,屏幕截图看起来您实际上并不想使用 aNSCollectionView而是 a NSTableView,这在性能方面要快得多。

于 2012-09-18T23:33:14.577 回答