2015-08-11 4 views
0

Мне нужно выложить мою базу данных с помощью некоторых «основных» таблиц при первой загрузке моего приложения. будет лучший подход к использованию NSUserDefaults в моем AppDelegate:Хранение настроек приложения в Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    NSUserDefaults.standardUserDefaults().registerDefaults([ 
     "hasSeededCoreTables": false 

     ]) 
    return true 
} 

Или я должен создать объект «Настройка» в основных данных и иметь логический набор там. Мне нужен флаг сохраняться между запусками так, что мы не должны переписать основные таблицы каждый раз, когда приложение запускается снова

+1

Я бы выбрал userDefaults для настроек, core Data больше подходит для масштабируемого динамического хранилища. –

+1

Если вы все равно планируете использовать Core Data, я считаю, что таблица «System», определенная как пары ключ/значение, хороша для согласованности ссылки на данные. Если нет, я бы не вводил Core Data только для поддержания флага. –

+0

согласованность ссылки на данные? как в приложении? я играл с идеей иметь все настройки приложения в таблице «System», поскольку это имеет для меня больше смысла, но есть ли какие-либо плюсы или минусы для каждого из методов? – dyatesupnorth

ответ

1

Без сомнения, способ сделать это - использовать NSUserDefaults. Вместо жесткого кодирования значений в AppDelegate я бы рекомендовал использовать plist, а затем вызвать registerDefaults() с содержимым этого файла.

Я бы не советовал использовать объект Core Data для сохранения пользовательских настроек по умолчанию. Это не то, для чего предназначен граф объектов. (С точки зрения производительности нет разницы: NSUserDefaults использует SQLite, и, предположительно, это ваш основной хранилище данных.)

Кстати, plists также часто являются хорошим способом засеять базу данных собственно фактическими данными, такими как образец записей.

0

Если вы хотите постоянные данные, даже если пользователь удалить приложение из своего устройства, используется:

NSKeyedArchiver 
NSKeyedUnarchiver 

Здесь хорошая библиотека: 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!"); 
    } 
} 
+0

Я думаю, что если они удалили приложение, было бы хорошо, если бы они снова заселили основные таблицы, также удаление приложения довольно полезно во время разработки, если мне нужно очистить db и начать заново. У вас есть примеры использования NSKeyedArchiver? – dyatesupnorth

+0

См. Мое отредактированное сообщение выше для примера :) –

+0

спасибо, я стараюсь не использовать сторонние библиотеки в этом проекте, но обязательно это рассмотрю в будущем :) – dyatesupnorth

Смежные вопросы