NSCollectionView 在创建项目时崩溃

NSCollectionView crashes when creating items

我的 NSCollectionView 在调用 makeItem(withIdentifier identifier: String, for indexPath: IndexPath) 时崩溃了。 numberOfItemsInSection returns 正确值。如果我在 viewDidLoad 中调用 makeItem... 而不是在 itemForRepresentedObject 中调用,我会看到一个错误,指示 indexPath 超出范围。怎么会这样?

集合视图加载如下:

class TagCollectionViewController: NSViewController, NSCollectionViewDataSource {

  fileprivate static let itemIdentifier = "TagItem"

  @IBOutlet var collectionView: NSCollectionView!
  fileprivate var tags = List<Tag>.init()

  override func viewDidLoad() {
    super.viewDidLoad()

    let nib = NSNib(nibNamed: "TagCollectionViewItem", bundle: nil)
    collectionView.register(nib, forItemWithIdentifier: TagCollectionViewController.itemIdentifier)

    collectionView.dataSource = self
}

(List 集合是一个 Realm class)

viewWillAppear() 期间,标签集合从 ReSwift 状态填充:

override func viewWillAppear() {
  for image in mainStore.state.selectedImages {
    for tag in image.tags {
      tags.append(tag)
    }
  }

  super.viewWillAppear()
}

解决了。

当我为项目创建 .xib 时,我添加了一个 NSCollectionViewItem 对象,但没有将视图连接到我的自定义视图。

回顾一下,对于任何被这个抓住的人,创建 NSCollectionViewItem 的步骤是:

  1. 创建 nib 并配置您的视图
  2. 向您的笔尖添加一个 NSCollectionViewItem 对象
  3. 将您的视图(以及任何其他视图)连接到对象
  4. 在视图控制器中使用 collectionView 注册 nib