私は NSCollectionView のカスタマイズで大きな進歩を遂げましたが、ここやウェブ全体で光ったヒントのおかげで、誰かが助けてくれることを願って少し苦労しています. ビデオ ファイルに関する情報を含む Core Data エンティティと、これらの各ビデオのサムネイル イメージ プレビューを表示する NSCollectionView があります。NSCollectionView でバインディングをセットアップしました。
バインディングをセットアップする最初の試みで、配列コントローラーをクラス モードでセットアップし、そのコンテンツを NSMutableArray に結び付けました。それらを表示させるために、配列コントローラーで addObject を実行していました。これは、ロードするオブジェクトが多い場合にかなり時間がかかるという事実を除けば、問題なく機能します。
だから... NSCollectionView を Core Data に直接バインドできるのに、すべてのオブジェクトを配列にコピーするのはばかげているように思えました。ArrayController をエンティティ モードに変更し、Managed Object Context をセットアップして、App Delegate の managedObjectContext を指すようにしました。アプリケーションを起動すると、ウィンドウが画面に表示されるまでに遅延が発生します。実際、windowDidLoad で行っている他の処理はすぐに処理されますが、ウィンドウが表示されるまでにさらに 5 ~ 10 秒かかります。完了すると、NSCollectionView に何も表示されなくなります。
誤ってウィンドウのサイズを変更し、すべてのアイテムがコレクション ビューに表示されるまで、最初は機能していないと思っていました。[collectionView setNeedsDisplay:YES] を呼び出すことができるように、ウィンドウが実際に表示されるタイミングを知る方法があるかどうかを確認しようとしましたが、機能しないか、適切な場所で呼び出していません。
オブジェクトが表示されない理由を知っている人はいますか? また、ウィンドウがすぐに表示され、コレクション ビューがコア データからアイテムをロードするようにしたいと考えています。Core Data から直接ロードすると、項目を配列にコピーするよりもはるかに高速に見えます。バインディングは IB でセットアップされているため、表示するものはあまりありませんが、ご覧になりたいコードを投稿していただければ幸いです。:)
ありがとう!