IBOutlets在NSCollectionViewItem是零
问题描述:
我有一个问题,它似乎我能够将项目添加到集合视图,并具有我从NSCollectionViewItem的子类创建的原型单元格,但是当我尝试按顺序更改标签显示数据是因为它们是零,即使我将它们从界面构建器连接起来,也会得到错误。IBOutlets在NSCollectionViewItem是零
我也通过向单元格攻击mouseup函数进行打印检出了representObject属性,并且它工作正常。当我试图分配显然不存在的插座的stringValue时,它只会分崩离析。
楼下,你可以看到我的故事板和控制该项目的意见。 标签对象在下面表示为两个@IBOutlets
。 representedObject
正在别名为var morpheme : Morpheme?
在这里,在主窗口控制器我测试了刚刚加入Morpheme
对象集合与我想用填充标签测试值。
显示屏显示在列表中的细胞,但是当我点击他们崩溃,由于从表面上未初始化网点nil
值。如果您在控制台中查看Morpheme 3
已成功打印,则数据模型已将其打印出来。是否还需要执行其他任何操作?有很多关于使用绑定菜单漂浮的东西,但我还没有发挥它周围很多。
答
也就是说它已经获得了相当的影响力非常有趣的问题。这个问题似乎是在可可个bug,因此当项目从原型创建的,其网点不上瘾。
查找创建原型时,会发生什么:
然后,当实际的实例被创建的出口是零:
所以,我的建议是使用一种2个解决方案:
- 使用nibs和NSCollectionViewDataSource基于视图创建集合视图项目。寻找最后的答案在这里: Cocoa - Where is the link between a NSCollectionView and a NSCollectionViewItem? Xcode 6 Bug?
或者只是看到关键字例子:“makeItemWithIdentifier”
- 不使用网点和使用数据绑定,我做了我例。我结合我的文字编辑,以代表对象:
这里是我的控制器代码:
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")
}
我最后的画面是(你可以看到我绑定标签的actaul串在阵列中):
谢谢!这有助于初步的绑定问题。现在看来我仍然有一些问题,列表仍然显示空白,我发现这是因为当单元格试图显示他们的数据('语素'对象)没有设置,所以他们是打开'nil'。稍后当我点击它们时,我可以让它们打印到控制台,但当代表性对象最终可用时,标签不会更新。 – Alexandstein
对于绑定系统来跟踪更改,您必须使用dynamic关键字:dynamic var morpheme:语素?或者如果有明确的设置,你应该让他们知道调用KVC前/后函数:willChangeValueForKey(“语素”) representObject = newValue didChangeValueForKey(“语素”)Morpheme对象内任何封闭属性的相同故事东西给他们) –
看起来像它的工作。谢谢!它看起来像我错误的一个小细节是使用'viewWillAppear()'而不是'viewDidLoad()'。我不确定触发顺序是什么,导致绑定同步问题。 – Alexandstein