2012-05-17 53 views
1

我加入一個對象的「m」到NSMutableArray如下:的NSMutableArray ADDOBJECT覆蓋數據

[m setObject:a forKey:@"a"]; 
    [m setObject:b forKey:@"b"]; 
    [m setObject:c forKey:@"c"]; 
    [m setObject:d forKey:@"d"]; 

    [myArray addObject:m]; 

    [m release]; 

對於一個對象時,它工作得很好,但是當加入另一個目的,反覆進行在所有的對象相同的值myArray的。

如何避免這種情況?

請幫忙。

謝謝。

+1

你在for循環這樣做呢? –

+2

您發佈的代碼很好。如果您需要解決方案,則需要提供更多代碼和錯誤示例。 – Joel

+0

不在for循環中,因爲第一次將我的數據插入到按鈕單擊中。稍後在從服務器接收數據並接收到通知更新屏幕後插入它。 – iOSDev

回答

9

每次填充並插入它時,您都需要創建一個單獨的實例NSMUtablearray,否則您將不斷重複使用相同的實例,因此只有最後一個狀態出現在數組的每個位置。

NSMutableArray *myArray = [NSMutableArray array]; 
for (int i = 0 ; i != 10 ; i++) { 
    NSMutableDictionary *m = [NSMutableDictionary dictionary]; 
    // Presumably, this part is done differently on each iteration 
    [m setObject:a forKey:@"a"]; 
    [m setObject:b forKey:@"b"]; 
    [m setObject:c forKey:@"c"]; 
    [m setObject:d forKey:@"d"]; 
    [myArray addObject:m]; 
} 
+0

我想他也可以[myArray addObject:[m mutableCopy]];避免相同的指針問題 –

+0

@KaanDedeoglu這是避免此問題的另一種方法。每次插入都不應該調用'release',但是在循環結束後應該釋放一次。 – dasblinkenlight

+0

我曾嘗試每次分配新的實例,但同樣的問題 – iOSDev

1

試試這個:

NSMutableDictionary* m = [NSMutableDictionary dictionary]; 
[m setObject:@"1" forKey:@"a"]; 
[m setObject:@"2" forKey:@"b"]; 
[m setObject:@"3" forKey:@"c"]; 
[m setObject:@"4" forKey:@"d"]; 

NSMutableArray* myArray = [NSMutableArray array]; 
[myArray addObject:m]; 

NSLog(@"%@", m); 
NSLog(@"%@", myArray);