设置UICollectionViewController时出错 - nib但没有获得UICollectionView

时间:2014-07-28 06:43:47

标签: ios xcode ios7 xcode6

将自定义单元格设置为UICollectionViewController时出现问题。

这是我的代码。

KidsDetailViewController.h

 #import <UIKit/UIKit.h>

 @interface KidsDetailViewController : UICollectionViewController <UICollectionViewDataSource>
 @property NSNumber *idCampana;

@property (weak, nonatomic) IBOutlet UICollectionView *grid;

@end

KidsDetailViewController.m

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

  return [grid_kid count];
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

GridCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MY_CELL" forIndexPath:indexPath];
cell.imageView.image = [UIImage imageNamed:self.truckImages[0]];

cell.prd_img.image = [UIImage imageNamed:@"ic_launcher_58x58"];

return cell;
}

GridCell.h

#import <UIKit/UIKit.h>

 @interface GridCell : UICollectionViewCell
 @property (weak, nonatomic) IBOutlet UIImageView *prd_img;

@end

GridCel.m

 #import "GridCell.h"

 @implementation GridCell

 - (instancetype)initWithFrame:(CGRect)frameRect {
      self = [super initWithFrame:frameRect];
      if (self) {
          // Initialization code
      }
   return self;
 }

 @end

这是错误。

   *** Assertion failure in -[KidsDetailViewController loadView], /SourceCache/UIKit_Sim/UIKit-3283.1/UICollectionViewController.m:166
   2014-07-28 02:25:18.874 Geelbe[7673:231598] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UICollectionViewController loadView] loaded the "jXd-Ir-mr4-view-0IK-5Q-NzC" nib but didn't get a UICollectionView.'
  *** First throw call stack:

我已尝试过所有内容但仍然出错。

感谢。

4 个答案:

答案 0 :(得分:3)

在故事板上添加UICollectionViewController作为嵌入式容器视图控制器时出现此问题。

我将容器视图控制器的自定义类切换为Collection View Controller。但是该视图控制器中的view属性仍然是Xcode样板UIView

删除故事板上控制器中的默认UIView,并将其替换为UICollectionView。应自动重新连接插座。

答案 1 :(得分:2)

我认为问题可能是因为你继承了UICollectionViewController,你不必再指定了,因为它已经实现了它。尝试顶部删除它,看看它是否能解决您的错误。

同样在Identity Inspector中,确保为相应的View Controller设置类KidsDetailViewController。

答案 2 :(得分:2)

Jeff Kelley的回答here为我犯了同样的错误。

  

当您使用UICollectionViewController时,视图插座需要   连接到故事板中的UICollectionView;如果是的话   另一个类的UIView,它会崩溃。

所以,我使用UIViewController和UICollectionView作为其属性,并与nib连接。

答案 3 :(得分:1)

如何使用nib(.xib)文件设置集合视图控制器。

通过从“用户界面”部分选择“清空”模板来添加新文件。从对象库中拖出UICollectionView对象。

1)关联nib哪个集合视图控制器类。

在文档大纲(左侧部分)的“占位符”下,选择“文件所有者”。显示Identity Inspector并将类下拉列表设置为UICollectionViewController的子类。

2)将nib与UICollectionView相关联。

同样,在文档大纲(左侧部分)的“占位符”下,选择“文件所有者”。右键单击它以查看“Outlets”和“Referencing Outlets”显示。 “Outlets”下的两个选项是“view”和“collectionView”。它反直觉,但从“视图”选择拖到文档大纲中的UICollectionView对象。

**如果你从“collectionView”选项中拖动,你将得到'loaded the“your_collection_view_controller”nib但没有得到UICollectionView'错误。

当你构建并运行时,代码现在应该“加载”nib并“获取”UICollectionView。