我正在存储一个默认值的小字典,用户可以稍后修改,但可能只会更改一次。 NSUserDefaults.standardUserDefaults似乎是存储这类东西的正确位置,我的问题是:有没有办法在构建时而不是运行时存储值?这段代码似乎没必要。
if !NSUserDefaults.standardUserDefaults().dictionaryForKey(default) {
NSUserDefaults.standardUserDefaults().setObject(defaultDictionary, forKey: "default")
}
或者,是否有更好的选择我应该考虑呢?
答案 0 :(得分:2)
注册应用的默认首选项
在发布时,应用应注册任何默认值 它希望存在和有效的偏好。当你要求 从未设置的首选项的值,方法
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文件,并使用您想要存储的值预填充该文件,然后可以在运行时访问它。