创建项目时NSCollectionView崩溃

时间:2017-03-19 18:05:32

标签: swift macos nscollectionview

我的NSCollectionView在致电makeItem(withIdentifier identifier: String, for indexPath: IndexPath)时崩溃了。 numberOfItemsInSection返回正确的值。如果我在makeItem...而不是viewDidLoad中调用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类)

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

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

  super.viewWillAppear()
}

1 个答案:

答案 0 :(得分:4)

解决了它。

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

enter image description here

总结一下,对于那些因此而感到困惑的人来说,创建NSCollectionViewItem的步骤是:

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