NSUserDefaults setValue和objectForKey

时间:2014-10-05 06:00:20

标签: ios key nsuserdefaults key-value-coding

你能用:

[[NSUserDefaults standardUserDefaults] setValue:objectID forKey:"objectID"]

NSUserDefaults中设置对象,然后使用以下方法检索该对象:

objectType *tempObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"objectID"]

所以要澄清一下,我要问的是,如果我使用setObject,我可以使用valueForKey吗?反之亦然,我可以使用setValue然后使用objectForKey检索它吗?

为什么你/不能这样做?

如果我读得正确,setObject / objectForKey与KVC有NSDictionarysetValue / valueForKey交易,对吗?

我只是想更好地理解两者之间的区别。

感谢。欢呼声。

1 个答案:

答案 0 :(得分:8)

来自文档

  

- (void)setObject:(id)value              forKey:(NSString *)defaultName

     

value参数只能是属性列表对象: NSData NSString NSNumber NSDate ,< strong> NSArray ,或 NSDictionary 。对于NSArray和NSDictionary对象,其内容必须是属性列表对象。参见

适用于setObject / objectForKey,您要在NSUserDefaults

中添加对象

如果objectID只是上述六种类型中的一种,那么您的示例将有效。为什么?因为NSUserDefaults获取该对象并将其保存到plist文件中的文件系统中,因此它需要知道如何处理该对象以保存它。如果添加了自定义对象,则NSUserDefaults将无法将其保存在文件系统上

虽然setValue / valueForKey使用类NSUserDefaults本身的属性,而不是使用其中要保存的对象


修改

  

所以要澄清一下,我要问的是,如果我使用setObject,我可以使用valueForKey吗?反之亦然,我可以使用setValue然后使用objectForKey检索它吗?

简答:是的,你可以

长答案:NSUserDefaults覆盖valueForKeysetValueForKey,表现得像objectForKeysetObjectForKey

但是,如果密钥与NSUserDefaults中的属性相同,则可能会发生冲突......但是在NSUserDefaults中没有属性的情况下,您可以使用它。但在我看来,如果没有记录,你应该特别使用标准方法