2013-03-03 112 views
1

我有一個NSArray bool值: NSArray * boolResults = [super foo:values]; 如何更改單元格0中的值?重新分配一個bool值給NSArray

我試過以下內容: boolResults [0] = @NO; 這導致一個錯誤:寫數組元素預期方法上類型的對象未找到 '的NSArray *'

,並且還這樣: BOOL * B = & [[陣列objectAtIndex:ⅰ] boolValue]; 得到了以下錯誤:地址表達式必須是左值或函數標誌

我不希望這樣的NSArray轉換爲NSMutableArray裏,以設置此值,有一個正常的方式做到這一點?

謝謝

回答

1

NSArray s爲不可變的。您可以使用修改後的NSArray重新指定指向陣列的指針。

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

就這樣NSArrayNSNumber s爲也是不變的,所以像[anArray[0] setBoolValue:NO]不存在。

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]]; 
+1

'boolResults [0] = @NO;'如果'boolResult'是一個'NSMutableArray',則是正確的 – Sebastian 2013-03-03 23:48:32