2012-05-17 67 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);