我需要在第一次加载应用程序时使用一些“核心”表来为我的数据库建立种子。是我在AppDelegate中使用NSUserDefaults的最佳方法:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NSUserDefaults.standardUserDefaults().registerDefaults([
"hasSeededCoreTables": false
])
return true
}
或者我应该在核心数据中创建一个“设置”实体并在其中设置一个布尔值。我需要在启动之间保持标志,以便每次应用程序重新启动时都不必覆盖核心表
答案 0 :(得分:1)
毫无疑问,这样做的方法是使用NSUserDefaults
。我建议使用plist,然后使用该文件的内容调用registerDefaults()
,而不是对AppDelegate中的值进行硬编码。
我不建议您使用Core Data实体来保留用户默认值。这真的不是对象图的用途。 (从性能角度来看,没有区别:NSUserDefaults
正在使用SQLite,并且可能是您的Core Data存储。)
答案 1 :(得分:0)
如果您想要持久数据,即使用户从他的设备中删除了您的应用,也使用了:
NSKeyedArchiver
NSKeyedUnarchiver
这是一个很好的lib:JNKeychain。 您可以在此处找到代码来源:https://github.com/jeremangnr/JNKeychain
在里面创建一个带有静态类方法的新类,这里是一个使用JNKeychain的例子,我们添加然后我们删除键链的键/值:
#pragma mark - Keychain exemple -
+ (void)JNKExemple
{
NSString *testKey = @"myTestKey";
NSString *testValue = @"myTestValue";
if ([JNKeychain saveValue:testValue forKey:testKey]) {
NSLog(@"Correctly saved value '%@' for key '%@'", testValue, testKey);
} else {
NSLog(@"Failed to save!");
}
NSLog(@"Value for key '%@' is: '%@'", testKey, [JNKeychain loadValueForKey:testKey]);
if ([JNKeychain deleteValueForKey:testKey]) {
NSLog(@"Deleted value for key '%@'. Value is: %@", testKey, [JNKeychain loadValueForKey:testKey]);
} else {
NSLog(@"Failed to delete!");
}
}