gpt4 book ai didi

swift - NSCollectionViewItem 中的 IBOutlets 为零

转载 作者:行者123 更新时间:2023-11-28 06:40:44 28 4
gpt4 key购买 nike

我遇到了一个问题,我似乎能够将项目添加到 Collection View ,并拥有从 NSCollectionViewItem 的子类创建的原型(prototype)单元格,但是当我尝试更改标签以显示来自这是因为它们是零而得到错误,即使我从界面构建器连接它们也是如此。

我还通过向单元格攻击 mouseup 函数进行打印来检查 representedObject 属性,它工作正常。只有当我尝试分配给显然不存在的网点的 stringValue 时,它​​才会崩溃。

在下方您可以看到我的 Storyboard和项目 View 的 Controller 。Label 对象在下面表示为两个 @IBOutletsrepresentedObject 被别名为 var morpheme : Morpheme? Storyboard view

在主窗口 Controller 中,我正在测试只是将 Morpheme 对象添加到集合中,其中包含我想要填充标签的测试值。 Main Window Code

显示屏显示列表中的单元格,但当我单击它们时,由于来自显然未实例化的 socket 的 nil 值,它崩溃了。如果您在控制台中查看 Morpheme 3 已成功打印,那么数据模型就成功了。我还需要做什么吗?有很多关于使用 float 的绑定(bind)菜单的东西,但我没有玩太多。 Error display

最佳答案

这是一个非常有趣的问题,已经引起了广泛关注。这个问题似乎是 Cocoa 中的一个错误,所以当从原型(prototype)创建项目时,他们的导出不会被钩住。

看看创建原型(prototype)时会发生什么:

enter image description here

然后当创建实际实例时,outlets 为 nil:

enter image description here

所以我的建议是使用 2 种解决方案之一:

  1. 使用 nib 和 NSCollectionViewDataSource 创建基于 View 的 Collection View 项。在这里寻找最后的答案: Cocoa - Where is the link between a NSCollectionView and a NSCollectionViewItem? Xcode 6 Bug?

或者只看带有关键字的例子:“makeItemWithIdentifier”

  1. 不要像我在示例中那样使用 socket 和数据绑定(bind)。我将我的文本编辑绑定(bind)到表示的对象:

enter image description here

这是我在 Controller 中的代码:

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

我的最终图片是(你可以看到我将标签绑定(bind)到数组中的 actaul 字符串):

enter image description here

关于swift - NSCollectionViewItem 中的 IBOutlets 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38069496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com