1

我有一个带有布尔值的 NSArray: NSArray* boolResults = [super foo:values]; 如何更改单元格 0 中的值?

我尝试了以下方法: boolResults[0] = @NO; 这会导致错误:在“NSArray *”类型的对象上找不到写入数组元素的预期方法

还有这个: BOOL* b = &[[array objectAtIndex:i] boolValue]; 收到以下错误:地址表达式必须是左值或函数指示符

我不希望将此 NSArray 转换为 NSMutableArray 以设置此值,有正常的方法吗?

谢谢

4

2 回答 2

4

如果数组不可变,则不能更改该值。解决方法有两个:

  1. 使数组可变;
  2. 让数组包含可变对象。

由于您不想使用可变数组,因此我将为您提供第二种解决方案的示例。由于标准框架中没有可变数字,我将其包装到 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]];
于 2013-03-03T23:43:15.427 回答
1

No.NSArray是不可变的。您可以使用修改后的NSArray.

NSArray *anArray = [super foo:values]
NSMutableArray *mutableCopy = [anArray mutableCopy];
// change your mutable copy and then reassign
anArray = [mutableCopy copy];

就像NSArray, NSNumbers 也是不可变的,所以类似的东西[anArray[0] setBoolValue:NO]不存在。

于 2013-03-03T23:44:35.923 回答