我有一个带有bool值的NSArray: NSArray * boolResults = [super foo:values]; 如何更改单元格0中的值?
我尝试了以下内容: boolResults [0] = @NO; 这会导致错误:在“NSArray *”类型的对象上找不到写入数组元素的预期方法
还有: BOOL * b =& [[array objectAtIndex:i] boolValue]; 得到以下错误:地址表达式必须是左值或函数指示符
我不希望将此NSArray转换为NSMutableArray以设置此值,是否有正常的方法来执行此操作?
由于
答案 0 :(得分:4)
如果数组不可变,则无法更改该值。解决方案有两个:
由于您不想使用可变数组,我将以第二个解决方案为例。由于标准框架中没有可变数,我将其包装到NSMutableData中。该示例假设您有一个包含单个对象的数组,其值为@YES,并且您希望将其更改为@NO:
NSNumber* number= @YES;
NSMutableData* data=[[NSMutableData alloc]initWithData: [NSKeyedArchiver archivedDataWithRootObject: number]];
NSArray* array= @[data]; // Now you have an array with a single value
// You want to change the first value to @NO:
number= @NO;
[array[0] setData: [NSKeyedArchiver archivedDataWithRootObject: number]];
答案 1 :(得分:1)
没有。 NSArray
是不可变的。您可以使用修改后的NSArray
重新指定指向数组的指针。
NSArray *anArray = [super foo:values]
NSMutableArray *mutableCopy = [anArray mutableCopy];
// change your mutable copy and then reassign
anArray = [mutableCopy copy];
就像NSArray
一样,NSNumber
也是不可变的,所以[anArray[0] setBoolValue:NO]
之类的东西不存在。