ここで少し迷っています: colorPicker のように機能するボタンを作成しました: クリックすると、ポップオーバーに collectionView が表示されます。私は最初にビュー+コレクションビュー(スクロールビュー+クリップビューとして埋め込まれた)を含むペン先ファイルでそれを行いました。ものは問題なく動作します。
nib ファイルは非常に単純なので (また、ビューをプログラムで設計する際のコーディング スキルを向上させるため)、nib ファイルを取り除き、不足している部分をコードで記述することにしました。問題は、collectionView の内容を除いて、なんとか仕事をやり遂げることです。詳細な調査の結果、メソッド内で次のことが明らかになりました。
func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem
データソース、メソッドを管理することになっている
collectionView.makeItem(withIdentifier: String, for: IndexPath)
動作しません。実際には、次のとおりです。
let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)
私がステップインしたときにデバッガーが言うように、アイテムは初期化されていません(nilではなく、初期化されていません)。どうやら、makeItem メソッドは、作成したサブクラスから collectionViewItem をインスタンス化することはありません。両方のプロジェクトがこれらの点で同一であるため、識別子は問題なく、nib バージョンと同様に collectionView.register 関数が呼び出されます。makeItem 関数は、サブクラス化した NSCollectionViewItem の loadView メソッドを呼び出しません。
どんな手掛かり?
ジョシュ