【问题标题】:Unknown segue relationship: Prototype with NSCollectionView未知的 segue 关系:带有 NSCollectionView 的原型
【发布时间】:2014-09-27 04:52:49
【问题描述】:

只需将 NSCollectionView 添加到 Storyboard,代码将无法编译并出现错误:Unknown segue relationship: Prototype

这是 Swift/XCode6-beta4 的已知错误还是我遗漏了什么?

【问题讨论】:

  • 你用 beta 5 试过了吗?
  • 大约一年后,我在使用 Xcode 7 Beta 1 时遇到了同样的问题。
  • Xcode 7 beta 3 中仍然存在
  • .. 并且仍在 Xcode 7.1 中发生 :(
  • 在 xcode 7.3 beta 4 7D152p 上仍然存在问题。这绝对是疯了

标签: storyboard swift nscollectionview xcode6


【解决方案1】:

这是一个已知的错误,在release notes of Xcode 6 beta-5 中提到(有解决方法):

添加 NSCollectionView 后,故事板可能无法编译 它。 (17009377)!

解决方法:选择一个包含 NSCollectionView 的 xib 并加载它 进入基于情节提要的视图。!

【讨论】:

  • 谢谢,我没看过。希望它肯定会在下一个测试版中得到修复。
【解决方案2】:

Xcode 7 beta 6 (see release notes) 更新:

Interface Builder 支持 10.11 中的新 NSCollectionView API,使用数据源和 iOS 上的布局。 (18997303)

  • 解决方法:无法在 Interface Builder 中配置原型项目。在代码中使用 -[NSCollectionView registerClass:forItemWithIdentifier:] 或 -[NSCollectionView registerNib:forItemWithIdentifier:]。

以前有没有人尝试过使用它?我是否应该在我的故事板中添加一个空的集合视图,然后为集合视图项创建一个 nib 文件,最后通过代码链接它?


Xcode 7.1 beta 3 更新

我今天已经下载并测试了新的测试版,但问题仍然存在。然而,他们奇怪地从release notes 中删除了解决方法说明,就好像他们已经修复它一样......

【讨论】:

  • 仍然是版本 7.2 (7C68) :(
【解决方案3】:

当您已经在使用故事板时,实际上不需要创建额外的 XIB 文件。

  1. 删除NSCollectionViewNSCollectionViewItem之间的连接

  2. 给视图项一个标识符

  3. 以编程方式在您周围的NSViewController中设置项目原型:

@IBOutlet weak var collectionView: NSCollectionView!

override func viewDidLoad() {
    self.collectionView.itemPrototype = self.storyboard?.instantiateControllerWithIdentifier("collectionViewItem")
        as NSCollectionViewItem
}

这将所有 UI 视图保存在一个位置,因此提供了比外来的 XIB 文件更好的解决方法。

【讨论】:

  • 太棒了!谢谢你。考虑到涉及单词“Controller”的方法名称(该项目如何成为控制器?例如,如果我要猜)。
  • 啊,没关系,我说得太早了,没有注意到断言失败。文档现在建议不再实际设置项目原型属性(无论如何使用 10.11 SDK 时)。
  • 对。但是,当您针对 10.11 之前的早期 OS X 版本时,这仍然是一个更好的解决方法,而不是创建额外的 XIB 文件。
【解决方案4】:

如果您使用的是 OSX 10.11 SDK,来自 Apple's release notes for it 的以下信息指示不再填充 itemPrototype 属性(当然假设您的最低部署目标是 10.11):

要使用 NSCollectionView 的新 API 模型,您可以通过设置 NSCollectionView 的“collectionViewLayout”属性来指定布局,并提供“dataSource”或将 CollectionView 的“内容”绑定到 NSArray 或 NSArrayController(请参阅“将内容绑定到 NSCollectionView “, 以下)。您还必须断开连接并丢弃 NSCollectionView 的“itemPrototype”,它是 10.10 和更早的 API 模型的遗迹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2018-05-28
    • 2020-03-18
    相关资源
    最近更新 更多