我有一个托管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方法上放了一个断点,它从来没有热化它。我做错了什么。
答案 0 :(得分:3)
根据文件:
如果现有单元格可用,则此方法会出现,或者根据先前注册的类或nib文件创建新单元格。
并继续:
重要说明:在调用此方法之前,必须使用registerClass:forCellWithReuseIdentifier:或registerNib:forCellWithReuseIdentifier:方法注册类或nib文件。
您需要实现其中一种方法,因为dequeueReusableCellWithReuseIdentifier: forIndexPath:
可能需要创建一个对象,并且需要上述方法来执行此操作。也许你创造了那些并没有展示它们。如果您已实施其中一个,您可以显示您的代码吗?
更新:
根据您的viewDidLoad
和您收到的错误消息,CellIdentifier
似乎是NSString
。当您调用[CellIdentifier class]
时,您正在将字符串注册为使用类,而不是单元格。你需要把你正在使用的课程。根据您的实施情况,您似乎可以使用[itemViewCell class]
。
您知道,您应该始终将课程资本化。因此,如果itemViewCell
是实际的类,则应将其更改为ItemViewCell
,属性和变量名称应为小写(因此cellIdentifer
vs CellIdentifier
)。