我的 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 。
回顾一下,对于任何遇到这种情况的人来说,创建 NSCollectionViewItem
的步骤是:
- 创建 nib 并配置您的 View
- 将
NSCollectionViewItem
对象添加到您的 Nib - 将您的 View (以及任何其他 View )连接到对象
- 在您的 View Controller 中使用 collectionView 注册 nib
关于swift - NSCollectionView 在创建项目时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890181/