【问题标题】:Getting values from userdefaults and creating an NSMutableDictionary从 userdefaults 获取值并创建 NSMutableDictionary
【发布时间】:2014-06-12 08:12:14
【问题描述】:

我正在尝试创建一个字典,它是 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 字段,它指定了类型。我们可以从这个字段中获取类型吗?

【问题讨论】:

    标签: ios objective-c nsuserdefaults


    【解决方案1】:

    你可以这样使用:

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

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

    您应该避免直接将单独的数据保存到 NSUserDefaults,您可以将它们打包在一个对象中,并且该对象应符合 NSCoding 协议。然后你把数据读出来就知道具体的类型了。

    【讨论】:

    • 但是我已经在 userdefaults 中存储了一些值,现在我想支持多个用户,我假设我可以在 userdefault 上创建,并且它将具有作为用户 ID 的键和值是 nsdictionaries。有了这一切,现在我想将所有 userdefaults 移动到字典并将其存储在该用户的 userdefaults 下。
    • 我已经检查了 finder 中的 debug.plist 并且在那里我可以看到指定值类型的类型列。您能否检查随附的屏幕截图,您认为有什么可以帮助我的吗?
    • 它对我有用 if(strcmp([value objCType], @encode(BOOL)) == 0) 我添加了一个额外的大括号 :)
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多