ios - NSUserDefaults setObject :nil vs. setNilValueForKey

标签 ios objective-c nsuserdefaults

每当我尝试以下行时,我的应用程序就会崩溃:

[[NSUserDefaults standardUserDefaults] setNilValueForKey:@"my_key"];

出现此错误:'NSInvalidArgumentException', reason: '[<NSUserDefaults 0x7a2423d0> setNilValueForKey]: could not set nil as the value for the key my_key.'

但是当我这样做时它似乎起作用了:

[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"my_key"];

有人可以解释这两个函数之间的区别吗?

最佳答案

setNilValueForKey:NSKeyValueCoding 协议(protocol)的一部分,不能直接调用,只是被具有自定义 NSKeyValueCoding 实现的类覆盖。然而,setObject:forKey:NSUserDefaults 提供的一种方法,当使用 nil 对象发送时,本质上是从默认值中删除 key (尽管这种行为在 Swift 中可能看起来不同).

关于ios - NSUserDefaults setObject :nil vs. setNilValueForKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27615834/

相关文章:

objective-c - 使用 CGAffineTransform 的奇怪结果

objective-c - 首次加载时某些单元格的 UITableViewCell 高度错误

ios - 如何访问 JSON 数据并将其显示在 XCode Logcat 中,如果响应为空,我想显示警报

ios - 在 ios 的 tableview 中的选定单元格上设置 imageview 的问题

objective-c - 从 NSuserDefaults 取消归档数据的正确方法是什么?

objective-c - 为什么会崩溃?

ios - uitableview 页脚中的超链接

ios - Xcode:架构 i386 的 undefined symbol

iOS 5.1 应用程序启动时崩溃,找不到符号 : _NSFontAttributeName

ios - 通过 Testflight 安装新版本时 NSUserDefaults 是否持续存在?