我有一个视图控制器同时充当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;
}
属性。
photo
@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无法识别?
答案 0 :(得分:1)
问题与您注册PIC_CELL
的方式有关。无论在哪里,都指定了错误的类。这可能在XIB文件或代码中。