繁体   English   中英

iOS 5-Coredata Sqlite DB终止应用程序后丢失数据

[英]iOS 5 - Coredata Sqlite DB losing data after killing app

我将coredata与sqlite DB结合使用以将数据持久保存在我的应用程序中。 但是,每次我杀死我的应用程序时,我都会丢失保存在数据库中的所有数据。 我非常确定,因为每次我的应用启动时,数据库的.sqlite文件都会被替换为一个新的.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;
}

出于优化目的进行更改时,不会保存对核心数据中的管理对象上下文所做的更改。 这样,您可以对上下文进行大量更改,然后立即保留所有更改。 因此,如果您在有机会自动保存之前杀死了您的应用程序,则将丢失所有数据。 我猜这就是您在这里遇到的事情。

无论如何,请在关闭应用程序之前尝试显式调用保存数据。 这应该可以解决您的问题。

例如,假设您有一个保存托管对象上下文的变量称为context ,则可以通过在关闭应用程序之前在代码中的某个位置进行以下调用来保存上下文:

[context save:&error]或只是[context save:nil]

您是否尝试将[self saveContext]放置在[self saveContext]函数applicationWillTerminate: 您应该在终止应用程序之前保存上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM