Tij*_*Kez 0 objective-c nsdictionary nsnull
我正在尝试使用NSArray不允许空值的NSDictionaries 的writeToFile方法.我想通过循环找到它们并用空NSString的替换,但我不能让它工作.这就是我正在尝试的.
编辑:NSArrays和NSDictionaries由NSJSONSerialization创建.
for (NSMutableDictionary *mainDict in mainArray)
{
for(NSMutableDictionary *subDict in mainDict)
{
for(NSString *key in subDict)
{
id value = [subDict objectForKey:key];
if (value == [NSNull null])
{
[subDict setObject:@"" forKey:key];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这引发了一个例外. *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
但是你可以看到所有的NSDictionaries都是可变的.
这是怎么回事?有一个更好的方法吗?
编辑:将新版本移至单独的答案.
你怎么知道这些词典是可变的?看起来他们不是.NSMutableDictionary在枚举期间键入它们不会使它们变得可变.您可以遍历字典并将密钥移动到新的可变密钥中,过滤空值.
此外,如果您的字典来自NSJSONSerialization,请查看NSJSONReadingOptions,可以选择使用可变容器来进行反序列化的结构.这并不总是一个好的解决方案,但值得一试.
至于在枚举字典时改变字典:你无法更改密钥,因为这很容易丢掉枚举代码.但我不明白为什么你不能改变关键值,这就是你所追求的.此代码有效:
NSMutableDictionary *dict = [@{@"foo" : @"bar"} mutableCopy];
for (NSString *key in dict) {
dict[key] = @"baz";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |