我正在创建UIViewController
,其中包含UICollectionView
这是故事板中的所有设置,代表和出口我认为是正确的。在UIViewController
中,我实现了以下方法:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
除了上述内容,故事板还包含一个UICollectionViewCell
,它在一个单独的类中定义。这一切都完美无缺,CollectionView正在按预期显示数据。
但是......我希望创建一个单独的类来实现UICollectionViewDataSource
,UICollectionViewDelegate
方法,并且我已经将上面的UIViewController
类中的方法剪切并粘贴到一个单独的数据源类。然后我将UICollectionViews委托和数据源设置为指向新类。这导致以下异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'
我尝试在故事板中添加新类作为NSObject
并连接集合视图,并且在ViewController中的ViewDidLoad方法中也以编程方式将两者都添加为相同的异常。此异常是在ViewDidLoad之前生成的,ViewController是根视图控制器。
我错过了什么,谷歌搜索表明集合视图initWithCollectionViewLayout是必需的,但是当在StoryBoard中初始化CollectionView时它是如何实现的?为什么它的方法在ViewController类中时它可以工作?
最后一点是使用xCode 6 Beta 5,在一个完美的世界中我会在xCode 5中尝试这个,但我正在将数据源迁移到Swift。
答案 0 :(得分:0)
在完成所有输入后我发现这是一个愚蠢的错字,我将数据源类作为UICollectionView的子类而不是NSObject。