我遇到了一个问题,似乎我可以将项添加到集合视图中,并拥有从NSCollectionViewItem的子类创建的原型单元格,但是当我试图更改标签以显示来自is get errors的数据时,因为它们为零,即使我从接口生成器连接它们。
我还检查了representedObject属性,通过打印攻击了单元格的mouseup函数,它工作正常。只有当我试图分配那些显然不存在的网点的价格时,它才会崩溃。
在下面你可以看到我的故事板和项目视图的控制器。
标签对象在下面表示为两个@IBOutlets
。representedObject
被别名为var morpheme : Morpheme?
在主窗口控制器中,我测试的只是将Morpheme
对象添加到带有测试值的集合中,我想用这些值填充标签。
屏幕显示列表中的单元格,但当我单击它们时,由于明显未实例化的出口的nil
值而崩溃。如果您在控制台中看到Morpheme 3
已成功打印,则数据模型将其加入。我还需要做什么吗?有很多关于使用绑定菜单的东西,但是我没有玩太多。
最佳答案
这是一个很有意思的问题,已经引起了很多人的注意。问题似乎是可可中的一个bug,所以当从原型中创建项目时,它们的销售渠道不会上钩。
看看创建原型时会发生什么:
当实际实例被创建时,出口为零:
因此,我建议使用以下两种解决方案之一:
使用nibs和NSCollectionViewDataSource基于视图创建集合视图项。在这里寻找最后一个答案:
Cocoa - Where is the link between a NSCollectionView and a NSCollectionViewItem? Xcode 6 Bug?
或者只看带有关键字“makeItemWithIdentifier”的示例
不要像我在示例中那样使用outlet和数据绑定。我将文本编辑绑定到表示对象:
这是我在控制器中的代码:
class ViewController: NSViewController {
dynamic var collectionViewData = [String]()
@IBOutlet weak var collectionView: NSCollectionView!
override func viewDidLoad() {
super.viewDidLoad()
guard let proto = self.storyboard?.instantiateControllerWithIdentifier("collectionViewItem") as? CustomCollectionViewItem else { return }
collectionView.itemPrototype = proto
collectionViewData.append("One")
collectionViewData.append("Two")
}
最后一张图片是(可以看到我将label绑定到数组中的actaul字符串):
关于swift - NSCollectionViewItem中的IBOutlets为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38069496/