swift - NSCollectionView 在创建项目时崩溃

标签 swift macos nscollectionview

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

Collection View 加载如下:

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()
}

最佳答案

解决了。

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

enter image description here

回顾一下,对于任何遇到这种情况的人来说,创建 NSCollectionViewItem 的步骤是:

  1. 创建 nib 并配置您的 View
  2. NSCollectionViewItem 对象添加到您的 Nib
  3. 将您的 View (以及任何其他 View )连接到对象
  4. 在您的 View Controller 中使用 collectionView 注册 nib

关于swift - NSCollectionView 在创建项目时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890181/

相关文章:

iOS swift 应用程序在文本字段中点击崩溃(NSNull 长度 - 实例无法识别的选择器)

ios - 不显示加速度计/陀螺仪 View

python - 看来我有一个 rpath 问题在 OSX El Capitan 10.11 上安装 pygame

swift - 无法以编程方式将文件图标图像添加到 xib ImageView

objective-c - NSCollectionView 中的悬停效果

swift - 如何使 Mac 应用程序响应命令波浪键快捷方式来切换窗口

ios - Swift 3.0 - NSNumber 和 Int 不能应用于操作数

macos - Mac OS X Lion 不再识别 environment.plist?

macos - Mac Shell脚本获取主目录

cocoa - NSCollectionView 拖动 - 拖动时项目变为透明