NSUserDefaults setValue和objectForKey

era*_*rad 3 key key-value-coding nsuserdefaults ios

你能用:

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

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

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

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

你为什么不能这样做?

如果我正确阅读,setObject/ objectForKey处理NSDictionarysetValue/或valueForKey处理KVC,对吗?

我只是想要更好地了解两者之间的差异.

谢谢.干杯.

Han*_*him 8

从文档中

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

value参数只能是属性列表对象:NSData,NSString,NSNumber,NSDate,NSArrayNSDictionary.对于NSArray和NSDictionary对象,其内容必须是属性列表对象.看到

这适用于在NSUserDefaultssetObject / objectForKey中添加对象的位置

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

.

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


编辑

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

简答:是的你可以

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

但是,如果关键是一样的,在随后NSUserDefaults的冲突可能一切发生的财产......但NSUserDefaults的中的情况下,它没有属性,那么你可以使用它.但在我看来,如果没有记录,你应该特别使用标准方法