将bool值重新分配给NSArray

时间:2013-03-03 23:40:17

标签: objective-c nsarray

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

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

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

我不希望将此NSArray转换为NSMutableArray以设置此值,是否有正常的方法来执行此操作?

由于

2 个答案:

答案 0 :(得分:4)

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

  1. 使数组可变;
  2. 让数组包含可变对象。
  3. 由于您不想使用可变数组,我将以第二个解决方案为例。由于标准框架中没有可变数,我将其包装到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]之类的东西不存在。