1

我目前正在使用Swift开发OS X应用程序。我在我的主视图中尝试使用NSCollectionView,因此我已将NSCollectionView对象添加到我的.xib文件中。除了将数据源和委托链接到文件所有者之外,我没有改变任何事情。使用NSCollectionView时声明失败

这是我写来实现NSCollectionViewDataSource协议代码:

/// MARK: - NSCollectionViewDataSource 
extension MainViewController: NSCollectionViewDataSource { 
    func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 10 
    } 

    func collectionView(collectionView: NSCollectionView, itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem { 
    let itemView = collectionView.makeItemWithIdentifier("fileItem", forIndexPath: indexPath) 
    itemView.textField!.stringValue = "TEST" 

    return itemView 
    } 

} 

现在,当我运行我的代码,我得到一个未捕获的异常,并且应用程序崩溃,我不知道为什么。这里是我认为是有用的堆栈跟踪的一部分:

2016-04-02 18:58:02.768 Pilot[5442:679789] *** Assertion failure in -[NSCollectionView setItemPrototype:], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1404.46/Binding.subproj/NSCollectionView.m:1286 
2016-04-02 18:58:02.971 Pilot[5442:679789] An uncaught exception was raised 
2016-04-02 18:58:02.971 Pilot[5442:679789] Use -registerNib:forItemWithIdentifier: and -registerClass:forItemWithIdentifier: with new CollectionViews 

任何帮助将不胜感激。

+1

你注册“fileItem”与registerNib或registerClass?或者以其他方式创建/将它连接到.xib文件中? – PRB

+0

@PRB我没有在任何地方注册“fileItem”。这可能是问题所在。我不完全确定这个参数的含义以及我应该如何注册。 – Rohan

+1

如果您使用故事板来设计布局,则集合视图中应该有一个Collection View Cell。转到属性检查器(在右侧,故事板的Utilities视图),并为单元格指定标识符“fileItem”(在Collection Reusable View下) – PRB

回答

0

您必须先注册自定义视图这样的:

collectionView.register(MyFileCollectionViewItem.self, forItemWithIdentifier: "fileItem") 

加载任何物品进入收藏视图之前(我建议在同一块它的创建,或在其控制的viewDidLoad())。