【发布时间】:2015-04-08 04:34:15
【问题描述】:
我花了一些时间查看其他类似的帖子,但无法找到我的确切问题。我是 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 的实例。
但是,当我在该行添加断点并查看我的变量时,我看到:
单元格 FooCollectionViewCell * 0x7fcb5340dcd0 0x00007fcb5340dcd0
从我的代码中也可以看出,该对象必须是 FooCollectionViewCell 类型,因为 cell 被实例化为类型。
我设置故事板的过程是:
- 将 CollectionViewController 拖到我的故事板中
- 将其自定义类设置为 FooCollectionViewController。这似乎有效,因为我的代码被调用了。
- 在自动创建的集合视图中单击自动创建的原型单元格,将其自定义类设置为 FooCollectionViewCell。将 Identifier 设置为“FooCell”,并将 ViewController 中的 reuseIdentifier 变量更新为“FooCell”。
我有什么遗漏吗?
【问题讨论】:
-
在您的故事板/NIB 中,您是否将“表格视图单元”的自定义类设置为 FooCollectionViewCell 以用于具有您的重用标识符的那个?
-
您是使用故事板还是使用自定义 .xib 如果您正在使用 .xib,那么您必须在 viewdidload 方法中注册您的 nib。我认为该单元正在制作但它没有分配价值尝试清理构建您的文件夹并重置您的模拟器然后它将解决您的问题
-
在您的代码中看不到哪个类用于创建单元格实例。引用 var
cell的类型没有任何意义。你在 xib/SB 中设置了什么?请在代码中添加对单元格类的检查,以查看是否有其他类实例化了单元格对象。 -
@Tom,是的,重用标识符匹配并且自定义类在我的故事板中正确设置。尽管如果重用标识符不匹配,我根本不希望调用此代码,对吗?如果自定义类与 FooCollectionViewCell 不匹配,我预计 dequeReusableCellWithReuseIdentifier 调用会因类型错误而失败?
-
不,这不会导致它失败。您只是告诉编译器您希望该单元格是 FooCollectionViewCell,并且编译器假定您知道自己在做什么。你需要回答汤姆的问题;这很可能是问题所在。
标签: ios objective-c uicollectionviewcell unrecognized-selector