在我的第一个函数中,我创建了一个NSMutableDictionary并将其保存在一个数组中。
NSMutableArray* tempPlayersArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey: @"kgpsTempArray"]];
NSMutableDictionary *tempPlayerDictArray = [[NSMutableDictionary alloc] init];
if (!(userDeviceName)) {
[tempPlayerDictArray setValue:userDeviceName forKey:@"DeviceName"];
}else{
[tempPlayerDictArray setValue:@"empty" forKey:@"DeviceName"];
}
[tempPlayersArray addObject:tempPlayerDictArray];
[defaults setObject:tempPlayersArray forKey:@"kgpsTempArray"];
[defaults synchronize];
在我的第二个函数中,我将它作为NSCFDictionary - 它是不可变的。
NSMutableArray* tempPlayersArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey: @"kgpsTempArray"]];
NSMutableDictionary *dictionaryForSearching = [[NSMutableDictionary alloc] init];
NSLog(@"%@",[dictionaryForSearching class]);
dictionaryForSearching = [tempPlayersArray objectAtIndex:index];
NSLog(@"%@",[[tempPlayersArray objectAtIndex:index] class]);
NSLog(@"%@",[dictionaryForSearching class]);
第一个日志显示“NSDictionaryM” 第二个日志显示“NSCFDictionary” 第三部分也显示了“NSCFDictionary”......
任何人都可以解释为什么吗?以及如何解决它?
答案 0 :(得分:4)
NSUserDefaults适用于不可变对象,因此当您返回字典时,它会被更改。
你可以试试这个:
dictionaryForSearching = [[NSMutableDictionary alloc] initWithDictionary:[tempPlayersArray objectAtIndex:index]];
答案 1 :(得分:0)
是的,NSUserDefaults
可以随意复制,保留和反序列化。假设它不返回可变对象。如果您需要一个可变对象,请制作一个可变副本。
答案 2 :(得分:0)
每件事都取决于此:
NSMutableArray* tempPlayersArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey: @"kgpsTempArray"]];
阅读NSUserDefaults总是会给你不可变对象。