故事板,UICollectionview,无法识别的选择器发送到实例

时间:2013-06-26 16:22:08

标签: ios objective-c ios6 uicollectionview

我有一个托管UICollectionview的故事板,在我实现

的collectionviewcontroller中
 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
              cellForItemAtIndexPath:(NSIndexPath *)indexPath
 {
   itemViewCell *itemCell =
   [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier
                                         forIndexPath:indexPath];

   return itemCell;
 }

但是在dequeueReusableCellWithReuseIdentifier上,app会抛出此异常:

 [__NSCFConstantString initWithFrame:]: unrecognized selector sent to instance 0x7443c60

所以我的第一个倾向是查看我正在创建的自定义单元格,只是为了确保我有一个该方法的实现,我实际上

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
       self.backgroundColor = [UIColor whiteColor];
    }
    return self;
} 

当然,我正在viewdidload中注册该单元格

 [super viewDidLoad];   
 [self.collectionView registerClass:[CellIdentifier class]
       forCellWithReuseIdentifier:CellIdentifier];

但我不认为这是相关的,因为我在initWithFrame方法上放了一个断点,它从来没有热化它。我做错了什么。

1 个答案:

答案 0 :(得分:3)

根据文件:

  

如果现有单元格可用,则此方法会出现,或者根据先前注册的类或nib文件创建新单元格。

并继续:

  

重要说明:在调用此方法之前,必须使用registerClass:forCellWithReuseIdentifier:或registerNib:forCellWithReuseIdentifier:方法注册类或nib文件。

您需要实现其中一种方法,因为dequeueReusableCellWithReuseIdentifier: forIndexPath:可能需要创建一个对象,并且需要上述方法来执行此操作。也许你创造了那些并没有展示它们。如果您已实施其中一个,您可以显示您的代码吗?

更新:

根据您的viewDidLoad和您收到的错误消息,CellIdentifier似乎是NSString。当您调用[CellIdentifier class]时,您正在将字符串注册为使用类,而不是单元格。你需要把你正在使用的课程。根据您的实施情况,您似乎可以使用[itemViewCell class]

您知道,您应该始终将课程资本化。因此,如果itemViewCell是实际的类,则应将其更改为ItemViewCell,属性和变量名称应为小写(因此cellIdentifer vs CellIdentifier)。