的NSMutableArray ADDOBJECT覆盖数据
我加入一个对象的“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的。
如何避免这种情况?
请帮忙。
谢谢。
每次填充并插入它时,您都需要创建一个单独的实例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];
}
我想他也可以[myArray addObject:[m mutableCopy]];避免相同的指针问题 –
@KaanDedeoglu这是避免此问题的另一种方法。每次插入都不应该调用'release',但是在循环结束后应该释放一次。 – dasblinkenlight
我曾尝试每次分配新的实例,但同样的问题 – iOSDev
试试这个:
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);
你在for循环这样做呢? –
您发布的代码很好。如果您需要解决方案,则需要提供更多代码和错误示例。 – Joel
不在for循环中,因为第一次将我的数据插入到按钮单击中。稍后在从服务器接收数据并接收到通知更新屏幕后插入它。 – iOSDev