我正在使用具有此结构的属性文件:
maxRating Number --> 5
gradePercent Dictonary
>grade1 Number --> 0.85
>grade2 Number --> 0.70
>grade3 Number --> 0.55
>grade4 Number --> 0.40
阅读我正在使用的属性
NSDictionary *plist = [[NSDictionary alloc] initWithContentsOfFile:filepath];
rating = [[plist objectForKey:@"maxRating"] intValue];
gradePercent = (NSMutableDictionary*)[[plist objectForKey:@"gradePercent"] copy];
直到这里,每件事情都完美无缺......我可以使用[gradePercent objectForKey:@"grade1"]
但是当我尝试用
设置其中一个时[gradePercent setObject:[NSNumber numberWithFloat:0.90] forKey:@"grade1"]
我总是收到SIGABRT错误而且APP崩溃了。
有谁知道为什么这不起作用?因为我没有-.-
答案 0 :(得分:4)
NSDictionary
是不可变的,只是将指针强制转换为NSMutableDictionary *
不会使对象神奇地变得可变。所以你需要一个可变的字典。你可以这样做:
NSMutableDictionary *plist = [[NSMutableDictionary alloc] initWithContentsOfFile:filepath];
答案 1 :(得分:4)
[[plist objectForKey:@"gradePercent"] copy]
返回一个不可变的字典。
您需要的是[[plist objectForKey:@"gradePercent"] mutableCopy]
答案 2 :(得分:1)
因为您拥有的词典只是从任何字典中获取Mutable字典,您需要在Muntable字典上调用addEntriesFromDictionary
e.g。
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict addEntriesFromDictionary:[plist objectForKey:@"gradePercent"]];
[plist objectForKey:@“gradePercent”]是一个NSDictionary,因此无法添加到。您不能简单地从NSDictionary *转换为NSMutableDictionary *。
答案 3 :(得分:1)
NSDictionary没有setObject:forKey:方法