Включена ли миграция постоянных хранилищ? Если вы только делаете тривиальные модификации модели, автоматическая миграция будет означать, что вам не нужно перезагружать данные.
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:@{
NSMigratePersistentStoresAutomaticallyOption:@YES,
NSInferMappingModelAutomaticallyOption:@YES,
NSSQLiteAnalyzeOption:@YES,
}
error:&error])
Если есть другая причина для очистки вашей модели, тогда NSUserDefaults
путь. Вы можете использовать #define, чтобы установить номер версии, и иметь постоянный сброс хранилища, когда числа отличаются друг от друга, а затем, когда вы знаете, что сделали изменение, которое требует пустого хранилища, вы можете увеличить #define:
#define kNukeTheCache 1000
...
NSNumber *nukeNumber = [[NSUserDefaults standardUserDefaults] objectForKey:nukemeKey];
if ((nukeNumber == nil) || (nukeNumber.integerValue < kNukeTheCache)) {
[self deletePersistentStore:storeURL];
}
[[NSUserDefaults standardUserDefaults] setInteger:kNukeTheCache forKey:nukemeKey];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:totalNuke];
[[NSUserDefaults standardUserDefaults] synchronize];
- (void)deletePersistentStore:(NSURL *)storeURL
{
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
if (error) { // Handle error }
}
Поток демона не препятствует выходу приложения. Программа завершается, когда все потоки, не являющиеся демонами (включая основной поток), завершены.
Итак, обычно, если вы делаете что-то в фоновом режиме, вы можете захотеть установить поток как демон, чтобы вам не приходилось явно иметь возврат функции этого потока, прежде чем приложение сможет выйти.
Например, если вы пишете приложение с графическим пользовательским интерфейсом, а пользователь закрывает главное окно, программа должна выйти. Но если у вас есть потоки, не являющиеся демонами, их не будет.
Из документации: http://docs.python.org/library/threading.html#threading.Thread.daemon
Его начальное значение наследуется от создающий поток; основной поток не является потоком демона и поэтому все потоки, созданные в основном потоке по умолчанию daemon = False.
Вся программа Python завершается, когда не осталось живых потоков, не являющихся демонами.