【发布时间】:2014-09-05 10:45:44
【问题描述】:
今天在iOS中发现了一些奇怪的东西,我解决了,但我想问一下有没有更好(更多iOS)的解决方案。
我想做的是:
遍历字典数组并为 iOS 中的每个字典添加新键
这是代码(这不是我的原始代码,它比较复杂,但我做了这个代码是为了说明问题):
- (void)testLoopThruArrayOfDictionaryAndAddNewKeyToEachDictionary
{
NSMutableArray* a = [[NSMutableArray alloc] init];
[a addObjectsFromArray:@[ @{@"one": @11, @"two": @12, } ]];
[a addObjectsFromArray:@[ @{@"one": @21, @"two": @22, } ]];
NSLog(@"%@", a);
/*
// NOT WORKING
for (NSMutableDictionary* dict in a)
{
// -[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x8b5bca0
[dict setObject:@3 forKey:@"three"];
}
*/
// THIS IS WORKING
for (int i=0; i<[a count]; i++)
{
// make tmp copy
NSMutableDictionary *tmpA = [a[i] mutableCopy];
[tmpA setObject:@3 forKey:@"three"];
// put to new value, because I use this [allValidMoves[i] mutableCopy];
a[i] = tmpA;
}
NSLog(@"%@", a);
}
如您所见,第二个循环正在工作,但我需要复制数组,然后将该副本放回数组。
即使我要求 NSMutableDictionary,第一个循环也会返回 NSDictionary。
问题
1. 有没有可能用更少的代码做到这一点?
2. 我的实施有副作用吗?
【问题讨论】:
-
不管你如何转换一个类——就像你第一种情况下的
NSMutableDictionary——因为你基本上在你的数组中创建了不可变NSDictionary对象。简单的类型转换不会改变原始对象的类型。
标签: objective-c nsmutablearray nsarray nsdictionary nsmutabledictionary