我正在尝试创建一个字典,它是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字段,它指定了类型。我们可以从这个领域得到类型。
答案 0 :(得分:0)
您可以这样使用:
// v is NSNumber
if ((strcmp([v objCType], @encode(BOOL) == 0) {
// this is BOOL
}
还有@encode(int)@encode(float)
您应该避免直接将分离的数据保存到NSUserDefaults,您可以将它们打包到一个对象中,并且此对象应符合NSCoding协议。然后,在您读出数据后,您将知道确切的类型。