NSUserDefaults setValue 和 objectForKey
Posted
技术标签:
【中文标题】NSUserDefaults setValue 和 objectForKey【英文标题】:NSUserDefaults setValue and objectForKey 【发布时间】:2014-10-05 06:00:20 【问题描述】:你能用吗:
[[NSUserDefaults standardUserDefaults] setValue:objectID forKey:"objectID"]
在NSUserDefaults
中设置一个对象,然后使用以下方法检索该对象:
objectType *tempObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"objectID"]
?
所以澄清一下,我要问的是,如果我使用 setObject
,我可以使用 valueForKey
吗?反之亦然,我可以使用setValue
,然后使用objectForKey
检索它吗?
为什么你可以/不能这样做?
如果我没看错,setObject
/ objectForKey
处理 NSDictionary
和 setValue
/ valueForKey
处理 KVC,对吗?
我只是想更好地理解两者之间的区别。
谢谢。干杯。
【问题讨论】:
Where's the difference between setObject:forKey: and setValue:forKey: in NSMutableDictionary? 的可能重复项 @gran33。我确实看到了这个问题,而且我的问题比那个问题更进一步。坦率地说,你引用的那个问题实际上可以被认为是另一个问题的重复。 【参考方案1】:来自文档
- (void)setObject:(id)value forKey:(NSString *)defaultName
value参数只能是属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。对于 NSArray 和 NSDictionary 对象,它们的内容必须是属性列表对象。见
这适用于 setObject / objectForKey
,您在其中添加对象在 NSUserDefaults 内
如果objectID
只是上述六种类型中的一种,则您的示例将起作用。为什么?因为 NSUserDefaults 获取该对象并将其保存到文件系统中的 plist 文件中,因此它需要知道如何处理该对象以保存它。如果您添加了自定义对象,则 NSUserDefaults 将无法将其保存在文件系统上
.
虽然setValue / valueForKey
与 NSUserDefaults 类本身的属性一起使用,但与您要保存的对象内部的属性无关
编辑
所以澄清一下,我要问的是,如果我使用 setObject,我可以使用 valueForKey 吗?反之亦然,我可以使用 setValue 然后使用 objectForKey 检索它吗?
简短回答:可以
长答案:NSUserDefaults 覆盖 valueForKey
和 setValueForKey
以表现得像 objectForKey
和 setObjectForKey
但是,如果密钥与 NSUserDefaults 中的属性相同,则可能会发生冲突……但对于没有属性的 NSUserDefaults,您可以使用它。但在我看来,如果没有记录,你应该使用标准方法来特别可读
【讨论】:
在发布此问题之前,我确实阅读了该文档。我要问的是,如果我使用setObject
,我可以使用valueForKey
吗?反之亦然,我可以使用setValue
,然后使用objectForKey
检索它吗?
@erad 请用上述语句再次更新问题。以上是关于NSUserDefaults setValue 和 objectForKey的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSUserDefaults 保存和检索 UILabel 值