我试图以以下方式实例化一个UICollectionViewController
:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UINib(nibName: "TestController", bundle: nil).instantiateWithOwner(nil, options: nil)
}
}
我的nib名为TestController.xib
,包含一个包含UICollectionView
的UICollectionViewController
。当我在nib中添加一个出口collectionView
(从UICollectionViewController
到UICollectionView
)时,上面的行抛出以下错误:
'NSInvalidArgumentException', reason: 'Can't add self as subview'
也许我的想法是错误的,但我不知道为什么会发生这种错误。
这是我的笔尖:
编辑:
当我没有在我的笔尖中添加任何出口时,错误就消失了。但是,my UICollectionViewController
中的UICollectionViewController
是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
发布于 2016-06-09 05:34:43
之所以会发生这种情况,是因为尽管Interface将控制器显示为UICollectionViewController,但是collectionView的内部神奇链接被破坏了。原因包括
但正如人们所指出的,在正确构造的nib中,collectionView绝对会在viewDidLoad时被填充。因此,如果不是,我建议拖出一个新的控制器实例并丢弃这个实例。几乎可以肯定的是,这要比试图弄清楚到底是怎么弄清楚为什么水管在这件上坏了要快。
编辑:
直到那个老式的nib范式在斯威夫特不起作用。谁知道呢?不是我,我只在斯威夫特黎明的时候用过故事板。如何正确地加载UICollectionView子类作为您的主视图,而不为遇到相同问题的人提供故事板是在吉特布。
https://stackoverflow.com/questions/37725970
复制相似问题