阵列初始化时出现iOS错误

时间:2012-08-03 14:12:52

标签: iphone objective-c ios nsmutablearray

我正在尝试初始化一个Photo的数组,我这样做:

NSMutableArray *photoList = [[NSMutableArray alloc] init];
self.photos = photoList;

但是当这行代码运行时,我收到了这个错误:

'NSInvalidArgumentException', reason: '-[Project setPhotos:]: unrecognized selector sent to instance 0xee8e310'

我花了大约三个小时试图找到修复但不能,有人可以告诉我该怎么做吗?

5 个答案:

答案 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