【发布时间】:2016-06-09 12:25:03
【问题描述】:
我正在尝试以下列方式实例化 UICollectionViewController:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UINib(nibName: "TestController", bundle: nil).instantiateWithOwner(nil, options: nil)
}
}
我的笔尖叫做TestController.xib,包含一个UICollectionViewController,其中包含一个UICollectionView。当我在笔尖内添加一个插座collectionView 从UICollectionViewController 到UICollectionView 时,上面的行会引发以下错误:
'NSInvalidArgumentException', reason: 'Can't add self as subview'
我的想法可能有错误,但我无法弄清楚为什么会发生这个错误。
这是我的笔尖:
编辑:
当我不在笔尖中添加任何插座时,错误就会消失。但是我的UICollectionViewController 中的collectionView 是nil,就像这样:
public class MyCollectionViewController: UICollectionViewController {
override public func viewDidLoad() {
super.viewDidLoad()
//unwrapping error!
self.collectionView!.backgroundColor = UIColor.blueColor()
}
}
我该如何解决这个问题?
编辑 2:
我在这个简单的 xcode 项目中重现了错误:https://github.com/Damnum/ReproduceControllerBug
【问题讨论】:
-
你能添加一些代码吗?这将有助于社区。span>
-
您说“当我在 nib 内添加一个从 UIViewController 到 CollectionView 的 segue collectionView 时......”这没有任何意义。
UICollectionViewController创建和管理集合视图(仅此而已)。如果您的 nib 定义了UICollectionViewController,则不适用 segue。另外,segues 是 Storyboard 的功能,而不是 nib。编辑您的问题以显示您的代码,并可能显示 nib 布局的屏幕截图。 -
如果你使用UICollectionViewController,collectionView是自动outlet,不要拖动Outlet。
-
因为 UICollectionVIewController 已经添加了 UICollectionView ,所以不需要为 UICollectionView 添加 outlet
-
@IyyappanRavi 和 Saurabh:当我不拖动插座时,UICollectionViewController 内的 collectionView 属性在 viewDidLoad() 中为零。这就是我创建插座的原因。还是有别的办法?
标签: ios swift uicollectionview xcode7 nib