我将NSUserDefault中的UserInfo Dictionary分配为NSMutableDictionary。 现在我的dicInfo是可变字典,但它包含的对象是不可变的。 因此,当我试图替换这些值会导致崩溃。 我附上描述崩溃报告的图像。 如果有任何解决方案,如何将可变字典的内部对象转换为可变。' - [__ NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法'导致崩溃
2
A
回答
8
的NSDictionary
类符合NSMutableCopying
协议。因此,我们可以在NSDictionary
上调用mutableCopy
方法获取对象的NSMutableDictionary
副本。
let dicInfo = userSharedDefaults?.objectForKey(UserDefaultKey.kUserBasicInfo) as? NSDictionary
let mutableDictionary = dicInfo?.mutableCopy
在斯威夫特,我们可能需要施放此为正确的类型:
let mutableDictionary = dicInfo?.mutableCopy as? NSMutableDictionary
1
var dicInfo = (userSharedDefault.object(forKey: "kUserbasicInfo") as! NSDictionary).mutableCopy() as! NSMutableDictionary
+2
请提供您的答案解释。 –
0
您还可以创建可变的字典如下: 它将修复崩溃。
let dicInfo = NSMutableDictionary.init(dictionary: userSharedDefaults?.objectForKey(UserDefaultKey.kUserBasicInfo) as! NSDictionary)
0
无论使用斯威夫特NSMutableDictionary
也不mutableCopy()
得到一个可变的字典从UserDefaults
。
千万不要那样做。
通常来说,从我这里批评其他答案,但NSMutableDictionary
和mutableCopy()
确实是在Swift中不适当的API。
- 要想从
UserDefaults
使用专用方法dictionary(forKey:
字典。默认的字典类型是[String:Any]
使对象可变只需使用
var
关键字var userbasicInfo : [String:Any] if let dictionary = UserDefaults.standard.dictionary(forKey: UserDefaultKey.kUserBasicInfo) { userbasicInfo = dictionary } else { userbasicInfo = [String:Any]() } userbasicInfo[kPin] = 5678 print(userbasicInfo) UserDefaults.standard.set(userbasicInfo, forKey:UserDefaultKey.kUserBasicInfo)
相关问题
- 1. “ - [__ NSCFDictionary的setObject:forKey:]:变异的方法发送到不可变对象”
- 2. - [__ NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法
- 3. NSInternalInconsistencyException',原因:' - [__ NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法
- 4. [__NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法
- 5. “ - [__ NSCFDictionary的setObject:forKey:]:变异的方法发送到不可变对象”,呼吁selectRowIndexes时:byExtendingSelection:
- 6. NSMutableArray的NSMutableArray。变异的方法发送到不可变对象
- 7. 应用程序崩溃:将突变方法发送到不可变对象
- 8. NSInternalInconsistencyException变异方法发送到不可变对象在Xcode 6.1
- 9. 发送到不可变对象变异方法 - 错误
- 10. NSMutableDictionary错误:发送给不可变对象的变异方法
- 11. 发送给不可变对象的变异方法
- 12. 变异方法发送到不可变对象,而对象是Mutiable
- 13. Xcode 8 iOS 10 - NSMutableDictionary引发 - “发送到不可变对象的变异方法”
- 14. 的NSMutableDictionary崩溃用“发送到不可变对象突变消息”
- 15. 不同诱变方法发送到不可变对象
- 16. 发送到不可变对象的突变方法
- 17. 发送到不可变对象的突变方法
- 18. NSInternalInconsistencyException原因:“ - [__ NSCFArray replaceObjectAtIndex:withObject:]:变异的方法发送到不可变对象”
- 19. 突变方法发送到不可变对象错误与mutableCopy()
- 20. 错误:replaceObjectAtIndex:withObject:]:突变方法发送到不可变对象
- 21. 如何处理“发送给不可变对象的变异方法”异常?
- 22. Webview对象导致可可崩溃
- 23. 删除对象时发送到不可变对象的变量方法错误
- 24. 如何解决发送给不可变对象的变异方法错误
- 25. 获取“发送给不可变对象的变异方法”错误
- 26. 通过Kryonet发送对象导致崩溃
- 27. 线程1:信号SIGABRT突变方法发送到不可变对象'
- 28. 当使用可变数组函数时发送给不可变对象的变异方法错误
- 29. 将细胞添加到现有的UICollectionView(将变异方法发送到不可变对象)
- 30. 发送到不可变的对象错误
安置自己的代码,而不是你的代码的屏幕截图。发布你的例外,而不是你的例外的截图。 – nhgrif