在数组中编辑NSMutableDictionary

时间:2011-04-26 08:01:22

标签: iphone objective-c arrays xcode dictionary

我有一个问题:我有一个NSMutableArray,我在多个视图中传递。在其中一个视图中,可以编辑该数组(NSMutableDictionary)中的对象的值。我这样做是使用代码:

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:selectedItem copyItems:YES];
NSMutableString *newLoc = [[NSMutableString alloc] initWithString:locationField.text]; 
[tester setValue:newLoc forKey:@"Location"];
[selectedList replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester];

我遇到的问题是在selectedList中替换该对象。它给出了错误*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0xa631e30' 如果我在selectedList的副本数组中复制新项目,并且再次使用新值分配selectedList,但其他视图在数组中再次找到相同列表(新分配的位置)时会出现问题。

TL; DR版本:如何在NSMutableArray中编辑值(通过替换?)?为什么不替换ObjectAtIndex工作?

编辑:确实是不可改变的。不过,主要问题仍然存在: 我有:

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:geselecteerdItem copyItems:YES];
[geselecteerdItem setValue:nieuweLoc forKey:@"Location"];
[geselecteerdeLijst replaceObjectAtIndex:[geselecteerdeLijst indexOfObject:tester] withObject:geselecteerdItem];

当我使用:[warningList replaceObjectAtIndex:[warningList indexOfObject:geselecteerdeLijst] withObject:keuzeLijst]时,它会给我一个outofbounds错误,因为geselecteerdeLijst数组的索引在warningList中明显改变了。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

selectedList immutable 数组,不支持任何修改。不过你可以这样做:

NSMutableArray *tmp = [NSMutableArray arrayWithArray: selectedList];
[tmp replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester];

编辑:为了澄清,__NSArrayINSArray的具体不可变子类,__NSArrayM是一个可变的子类。你不应该依赖私人班级名称,但由于他们不言自明,你至少可以知道哪些是可变的,哪些不是。