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

Posted

技术标签:

【中文标题】设置 UICollectionViewController 时出错 - 笔尖但没有获得 UICollectionView【英文标题】:Error when set UICollectionViewController - nib but didn't get a UICollectionView 【发布时间】:2014-07-28 06:43:46 【问题描述】:

将自定义单元格设置为 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:

我什么都试过了,还是报错。

谢谢。

【问题讨论】:

按照这些步骤 1. 退出 Xcode 2. 转到派生数据的文件夹并删除所有内容 3. 打开 Xcode 并执行产品清理 4. 运行您的应用程序 你的笔尖是从那个类派生的吗?检查您的文件所有者。 【参考方案1】:

我在故事板上添加 UICollectionViewController 作为嵌入式容器视图控制器时遇到了这个问题。

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

删除情节提要上控制器中的默认UIView,并将其替换为UICollectionView。插座应该会自动重新连接。

【讨论】:

【参考方案2】:

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

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

【讨论】:

你能评价这个答案吗?删除什么?谢谢!【参考方案3】:

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

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

所以,我使用 UIViewController 和 UICollectionView 作为它的属性,并与 nib 挂钩。

【讨论】:

【参考方案4】:

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

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

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

在文档大纲(左侧部分)的“占位符”下,选择“文件的所有者”。显示身份检查器并将类下拉菜单设置为 UICollectionViewController 的子类。

2) 将 nib 与 UICollectionView 关联。

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

** 如果您从“collectionView”选择中拖动,您将收到“已加载“your_collection_view_controller”nib 但未收到 UICollectionView”错误。

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

【讨论】:

以上是关于设置 UICollectionViewController 时出错 - 笔尖但没有获得 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

swift 3 - 自定义集合视图单元格之间的水平空间

时钟设置在哪里设置?

QGIS基本设置和项目设置

短视频运营短视频剪辑 ⑤ ( 视频素材使用 | 设置插入后的视频素材属性 | 设置画面 | 设置音频 | 设置变速 | 设置动画 | 设置调节 )

SeeMusicMIDI 编辑功能 ( 速度设置 | SoundFont 音源设置 | 混响强度设置 | 混响时间设置 | 力度增益设置 | 实时 MIDI 设置 )

win10设置里的代理怎么设置