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
的步骤是:
- 创建 nib 并配置您的视图
- 向您的笔尖添加一个
NSCollectionViewItem
对象
- 将您的视图(以及任何其他视图)连接到对象
- 在视图控制器中使用 collectionView 注册 nib
我的 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
的步骤是:
- 创建 nib 并配置您的视图
- 向您的笔尖添加一个
NSCollectionViewItem
对象 - 将您的视图(以及任何其他视图)连接到对象
- 在视图控制器中使用 collectionView 注册 nib