我目前正在NSUInteger
存储NSUserDefaults
以保留数据,但我需要转移到符合NSObject
的{{1}},并将其存储为NSCoding
。有没有办法确定我是否在我的密钥中存储了一个int或一个对象,以便我可以容纳那些已经或者没有从一种持久性类型迁移到另一种持久性类型的用户?我知道NSData
会返回一个id,这样就足够了吗?
objectForKey
答案 0 :(得分:3)
您可以使用isKindOfClass:
特别处理NSData
,除非我不打算将整数拆箱仅重新加箱。以下方法处理并返回任何类型。
注意:无需转换未归档的数据,因为编译器在您返回id
时不会小心。
- (id)stuffForKey:(NSString *)key {
id value = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if ([value isKindOfClass:[NSData class]]) {
// then it must be an archived object
NSData *dataValue = (NSData *)value;
return [NSKeyedUnarchiver unarchiveObjectWithData:dataValue];
}
return value;
}