如何确定NSUserDefaults中存储的数据类型

时间:2015-12-17 18:02:43

标签: ios objective-c nsuserdefaults

我目前正在NSUInteger存储NSUserDefaults以保留数据,但我需要转移到符合NSObject的{​​{1}},并将其存储为NSCoding。有没有办法确定我是否在我的密钥中存储了一个int或一个对象,以便我可以容纳那些已经或者没有从一种持久性类型迁移到另一种持久性类型的用户?我知道NSData会返回一个id,这样就足够了吗?

objectForKey

1 个答案:

答案 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;
}