【发布时间】:2014-10-02 11:42:52
【问题描述】:
我正在创建包含UICollectionView 的UIViewController,这是我认为是正确的故事板、代表和出口中的所有设置。在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 是必需的,但是当 CollectionView 在 StoryBoard 中初始化时如何实现?为什么它的方法在 ViewController 类中时它会起作用?
最后一点是使用 xCode 6 Beta 5,在一个完美的世界中,我会在 xCode 5 中尝试这个,但我正在将数据源迁移到 Swift。
【问题讨论】:
标签: ios objective-c xcode uiviewcontroller uicollectionview