【问题标题】:NSCollectionView crashes when creating items创建项目时 NSCollectionView 崩溃
【发布时间】:2017-03-19 18:05:32
【问题描述】:

我的NSCollectionView 在调用makeItem(withIdentifier identifier: String, for indexPath: IndexPath) 时崩溃。 numberOfItemsInSection 返回正确的值。如果我在viewDidLoad 而不是itemForRepresentedObject 中调用makeItem...,我会看到一个错误,表明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()
}

【问题讨论】:

    标签: swift macos nscollectionview


    【解决方案1】:

    解决了。

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

    回顾一下,对于任何被此问题抓住的人,创建NSCollectionViewItem 的步骤如下:

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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      相关资源
      最近更新 更多