自定义集合视图单元属性在设置时抛出超类的错误

时间:2013-06-12 22:04:47

标签: ios properties uicollectionview uicollectionviewcell

我有一个视图控制器同时充当dataSource的{​​{1}}和delegate

UICollectionView

在上面的方法中,我实例化一个自定义集合视图单元格并尝试设置它的- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { PhotoCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"PIC_CELL" forIndexPath:indexPath]; UIImage *photo = [UIImage imageWithData:[[_fetchedImages objectAtIndex:indexPath.row] valueForKey:@"picture"]]; if (photo) { cell.photo = photo; } return cell; } 属性。

PhotoCell.h

photo

PhotoCell.m

@interface PhotoCell : UICollectionViewCell {
}

@property (nonatomic, strong) IBOutlet UIImageView *imageView;
@property (nonatomic, strong) UIImage *photo;

@end

在这里,我覆盖了@implementation PhotoCell - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { //customization } return self; } - (void)setPhoto:(UIImage *)photo { UIGraphicsBeginImageContextWithOptions(CGSizeMake(83.0, 83.0), NO, 0.0); [photo drawInRect:CGRectMake(0, 0, 83, 83)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if (_photo != newImage) _photo = newImage; self.imageView.image = _photo; } 属性的setter,允许在将其设置为属性之前调整传递的照片的大小。

但是,当代码执行并实例化photo自定义单元格时,尝试在PhotoCell方法中设置photo属性时会引发以下错误:

-cellForItemAtIndexPath:

系统似乎将自定义单元格视为其超类 -[UICollectionViewCell setPhoto:]: unrecognized selector sent to instance 0x155c1270 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICollectionViewCell setPhoto:]: unrecognized selector sent to instance 0x155c1270' 的实例,而不是实际的类UICollectionViewCell。不覆盖setter时会抛出相同的错误。

为什么自定义单元格被视为其超类的实例,导致setter无法识别?

1 个答案:

答案 0 :(得分:1)

问题与您注册PIC_CELL的方式有关。无论在哪里,都指定了错误的类。这可能在XIB文件或代码中。