ios - MutableDictionary 变为不可变

标签 ios

在我的第一个函数中,我创建了一个 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”...

谁能解释一下为什么?以及如何解决?

最佳答案

NSUserDefaults 与不可变对象(immutable对象)一起工作,因此这就是当您返回字典时它已更改的原因。

你可以试试这个:

dictionaryForSearching = [[NSMutableDictionary alloc] initWithDictionary:[tempPlayersArray objectAtIndex:index]];

关于ios - MutableDictionary 变为不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243945/

相关文章:

ios - 使用 theos tweak 在收到的短信上启动应用程序

iphone - 按钮中的 ImageView 不出现

iphone - Phonegap iPhone : camera plugin : orientation issue

ios - 帐户过期后如何从 iTunes Connect 中删除 iOS 应用程序

objective-c - 从 Obj-C 将 iOS 应用程序移植到 Mac/Mac Ruby?

ios - 当 collectionviewcell 被释放时

iphone - 重复的 UItableViewCell,UITableView 的行

ios - TableViewCell 到 ViewController - Swift

ios - 删除后将 SKSpriteNode 子节点添加回父节点

ios - 使用 PinLayout 制作 GridView