我正在使用带有sqlite数据库的coredata来保存我应用中的数据。但是,每次我杀死我的应用程序时,我都会丢失数据库中保存的所有数据。我很确定它是因为每次我的应用程序启动时我的数据库的.sqlite文件都被新的替换了,但我似乎找不到任何只使用现有的代码的代码。 如果有人能指出一些可以为我处理这个问题的代码,那将是很棒的。
干杯
乙
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"FlickrCoreData.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
答案 0 :(得分:3)
在进行更改以进行优化时,不会保存核心数据中托管对象上下文的更改。这样,您可以对上下文进行一系列更改,然后立即保留所有更改。因此,如果您在有机会自动保存之前杀死了您的应用,那么您将丢失所有数据。我猜这是你在这里遇到的。
在任何情况下,请在关闭应用之前尝试明确拨打电话以保存数据。这应该可以解决你的问题。
例如,假设您有一个包含名为context
的托管对象上下文的变量,您可以通过在关闭应用程序之前在代码中的某处进行以下调用来保存您的上下文:
[context save:&error]
或只是[context save:nil]
答案 1 :(得分:1)
您是否尝试在appDelegate function [self saveContext]
中放置applicationWillTerminate:
。您应该在终止应用程序之前保存上下文。