我有一个类型为NSArray的数组如下:
@property (nonatomic, strong) NSArray *myArray;
在这个数组的setter中,我想检查数组计数是否为0,然后返回nil,否则返回数组。我这样做如下:
- (NSArray *)myArray
{
return ([self.myArray count] == 0) ? nil : self.myArray;
}
如果我为NSArray返回nil,我没有得到任何构建错误,但它给我运行时错误的访问代码错误。我在这里犯了什么错误?
答案 0 :(得分:1)
你的getter方法是递归调用自身的,因为
self.myArray
由编译器翻译为
[self myArray]
这最终导致堆栈溢出(!)。
在属性的setter或getter方法中,您必须访问 相关的实例变量,例如
- (NSArray *)myArray
{
return ([_myArray count] == 0) ? nil : _myArray;
}
答案 1 :(得分:0)
在调用此方法之前,您是否在其他任何位置实例化数组?它必须存在才能访问它。
_myArray = [NSArray arrayWithObjects:@"one",@"two",nil];
或创建数组的许多其他技术之一。