自定义子类上无法识别的选择器

时间:2015-04-08 04:34:16

标签: ios objective-c uicollectionviewcell unrecognized-selector

我花了一些时间浏览其他类似的帖子,但无法找到我的确切问题。我是iOS和目标c的新手,所以它可能非常简单。

我正在继承UICollectionViewCell:

@interface FooCollectionViewCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *cellLabel;
@end

在我自定义的UIViewController子类中,我正在尝试为cellLabel设置一个值:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        FooCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    // Configure the cell
    UILabel *label = [[UILabel alloc] init];
    label.text = @"whatever";
    cell.cellLabel = label;

    return cell;
}

我的应用在运行时崩溃:

  

[UICollectionViewCell setCellLabel:]:无法识别的选择器发送到实例0x7fef224144f0

如果我理解了这个错误,它看起来在抱怨我正在尝试在UICollectionViewCell的实例上设置cellLabel属性,而不是FooCollectionViewCell子类的实例。

但是,当我在该行添加断点并查看我的变量时,我看到:

  

cell FooCollectionViewCell * 0x7fcb5340dcd0 0x00007fcb5340dcd0

从我的代码中可以明显看出,对象必须是FooCollectionViewCell类型,因为类型cell被实例化为。

我设置故事板的过程是:

  1. 将CollectionViewController拖到我的故事板
  2. 将其自定义类设置为FooCollectionViewController。这似乎有效,因为我的代码被调用。
  3. 单击在自动创建的Collection View中自动创建的原型单元格,将其Custom Class设置为FooCollectionViewCell。将Identifier设置为“FooCell”,并将ViewController中的reuseIdentifier变量更新为“FooCell”。
  4. 我有什么遗失的吗?

2 个答案:

答案 0 :(得分:0)

你说你按照教程。你完成了这些步骤吗?

  

通过实现基本集合视图类并与故事板对象相关联,现在是时候设计单元格了。这很简单,就是将项目从对象库拖放到故事板视图中的原型单元格上。另外,可以通过选择它并使用得到的调整大小手柄来修改单元的大小。细胞的确切设计完全取决于要显示的内容。但是,出于本示例的目的,每个单元格只是显示图像。

因为您在代码中创建了一个新标签,所以它应该已经在原型单元格中可用。你只需要分配cell.cellLabel.text = @" bla bla&#34 ;;

UILabel *label = [[UILabel alloc] init];
label.text = @"whatever";
cell.cellLabel = label;

答案 1 :(得分:0)

我弄明白了这个问题。当我创建视图控制器子类时,文件自动具有

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

在我的viewDidLoad方法中。所以我认为这超越了我在故事板中所做的事情。 FML,但我学到了一些东西。谢谢你的帮助!

解决方法是删除此行,因为我在故事板中配置了这一行。