使用NSUserDefaults在构建时存储默认值

时间:2015-10-12 18:22:26

标签: ios swift nsuserdefaults

我正在存储一个默认值的小字典,用户可以稍后修改,但可能只会更改一次。 NSUserDefaults.standardUserDefaults似乎是存储这类东西的正确位置,我的问题是:有没有办法在构建时而不是运行时存储值?这段代码似乎没必要。

if !NSUserDefaults.standardUserDefaults().dictionaryForKey(default) {
        NSUserDefaults.standardUserDefaults().setObject(defaultDictionary, forKey: "default")
    }

或者,是否有更好的选择我应该考虑呢?

2 个答案:

答案 0 :(得分:2)

按照documentation

中的说明注册默认值
  

注册应用的默认首选项

     

在发布时,应用应注册任何默认值   它希望存在和有效的偏好。当你要求   从未设置的首选项的值,方法   NSUserDefaults类返回适合的默认值   数据类型。对于数值标量值,这通常意味着   返回0,但对于字符串和其他对象,它意味着返回nil。   如果这些标准默认值不适合您的应用,那么您   可以使用registerDefaults:注册您自己的默认值   方法。此方法将您的自定义默认值放在   NSRegistrationDomain域,导致它们在返回时返回   偏好未明确设定。

     

调用registerDefaults:方法时,必须提供   您需要注册的所有默认值的字典。清单2-1   显示了iOS应用程序提前注册其默认值的示例   在发射周期中。您可以随时注册默认值   当然,但应该在尝试检索之前注册它们   任何偏好值。

     

清单2-1注册默认首选项值

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Register the preference defaults early.
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:@"CacheDataAgressively"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
 // Other initialization... 
} 
     

在为标量类型注册默认值时,使用NSNumber对象指定值的值   数。如果要注册其值为URL的首选项,请使用   编码的archivedDataWithRootObject: NSKeyedArchiver方法   首先是NSData对象中的URL。虽然你可以使用类似的   对于其他类型的对象的技术,你应该避免这样做   更简单的选择。

答案 1 :(得分:0)

要在构建时存储值,我会创建一个.plist或.json文件,并使用您想要存储的值预填充该文件,然后可以在运行时访问它。