我正在尝试初始化一个Photo
的数组,我这样做:
NSMutableArray *photoList = [[NSMutableArray alloc] init];
self.photos = photoList;
但是当这行代码运行时,我收到了这个错误:
'NSInvalidArgumentException', reason: '-[Project setPhotos:]: unrecognized selector sent to instance 0xee8e310'
我花了大约三个小时试图找到修复但不能,有人可以告诉我该怎么做吗?
答案 0 :(得分:4)
在我看来,你还没有创建属性照片,如果你有,那么你的实现中似乎这个属性不是@synthesize
,也许你正在使用@dynamic
,在这种情况下,您可以创建- (void)setPhotos:(NSMutableArray*)photos;
方法
答案 1 :(得分:2)
self
没有名为photos
您需要在@property (nonatomic, strong) NSArray *photos;
.h
文件中添加@end
并在.m
文件中@synthesize photo;
答案 2 :(得分:2)
好像你还没有写过照片的setter方法。
你的.h 中的
@property (strong, nonatomic) NSArray * photos;
你的.m中的(如果没有使用xcode 4.4)
@synthesize photos;
或者您可以尝试像这样写
photos = [NSArray arrayWithArray:photoList];
如果您使用[self setMyArray:array]或self.array = myArray,请参考 然后你使用setter方法,这是你可能想要做的事情。如果您只是指向array = myArray,那么您将指向myArray,如果它被释放,您的指针将指向深渊。不这样做是好的,不使用setter意味着你直接访问可变照片,这可能不是你想要的。
答案 3 :(得分:2)
这行代码:
self.photos = photoList;
变成了这一行
[self setPhotos:photoList];
由编译器 - 点符号是所谓的“合成糖”,因为它只是使它更容易键入,它并没有真正缩短代码。
如果你已经创建了自己的getter和setter(即)
- (NSMutableArray *)photos;
- (void)setPhotos:(NSMutableArray *)myPhotos
然后即使您没有名为“照片”的属性,您也可以使用该糖 - 虽然这被认为是对该功能的误用(我将其用于比较目的)。
创建名为photos的属性时:
@property (nonatomic, strong) NSMutableArray *photos;
编译器将使用相同的名称为您生成一个ivar,但不会创建getter和setter。这一行:
@synthesize photos;
要求编译器执行getter(在所有情况下)和setter(如果属性是read write)。如果你没有提供@synthesize语句,编译器通常会抱怨,所以人们应该观察这些警告。
你可以在错误中看到你没有setPhotos,因此你的问题很容易解决。
答案 4 :(得分:1)
哎呀,我使用的是@dynamic photos
而不是@synthesize photos