从userdefaults获取值并创建NSMutableDictionary

时间:2014-06-12 08:12:14

标签: ios objective-c nsuserdefaults

我正在尝试创建一个字典,它是NSUserdefaults的副本。我希望字典包含相同的值和键。 但是,当我们将bool和int值保存到字典时,我们需要将它们转换为NSNumber。现在我正在做以下事情。但不确定bool值和int值是哪个值。如果我能够知道价值的类型,我可以休息。有没有办法检查它是bool还是int。

NSArray *availableUserDefaultsKeys = [NSArray arrayWithObjects:@"Key1", @"Key2",nil];
NSMutableDictionary *userDefaultsDictionary = [NSMutableDictionary dictionary];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

for (NSString *key in availableUserDefaultsKeys) {
    id value = [userDefaults objectForKey:key];
    if (value != nil) { // Is there any way to check whether the value is bool or int here
        [userDefaultsDictionary setObject:value forKey:key];
    } else {
        [userDefaultsDictionary setObject:[NSNull null] forKey:key];
    }
}

我已经检查了存储了所有用户默认值的debug.plist,因为我们有type字段,它指定了类型。我们可以从这个领域得到类型。

Please check the file type in the screenshot

1 个答案:

答案 0 :(得分:0)

您可以这样使用:

// v is NSNumber
if ((strcmp([v objCType], @encode(BOOL) == 0) {
    // this is BOOL
}

还有@encode(int)@encode(float)

您应该避免直接将分离的数据保存到NSUserDefaults,您可以将它们打包到一个对象中,并且此对象应符合NSCoding协议。然后,在您读出数据后,您将知道确切的类型。