你能用:
[[NSUserDefaults standardUserDefaults] setValue:objectID forKey:"objectID"]
在NSUserDefaults
中设置对象,然后使用以下方法检索该对象:
objectType *tempObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"objectID"]
所以要澄清一下,我要问的是,如果我使用setObject
,我可以使用valueForKey
吗?反之亦然,我可以使用setValue
然后使用objectForKey
检索它吗?
为什么你/不能这样做?
如果我读得正确,setObject
/ objectForKey
与KVC有NSDictionary
和setValue
/ valueForKey
交易,对吗?
我只是想更好地理解两者之间的区别。
感谢。欢呼声。
答案 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覆盖valueForKey
和setValueForKey
,表现得像objectForKey
和setObjectForKey
但是,如果密钥与NSUserDefaults中的属性相同,则可能会发生冲突......但是在NSUserDefaults中没有属性的情况下,您可以使用它。但在我看来,如果没有记录,你应该特别使用标准方法