核心数据对象有时不会保存到永久存储

时间:2014-11-26 08:46:31

标签: ios objective-c core-data save

我在复杂的应用程序中遇到了Core Data的奇怪问题。功能可以像购物车一样最好地描述。用户将物品放入此购物车,可以付款,等等。一开始一切正常。对象全部保存到sqlite文件中。但过了一段时间后,突然(大部分但并不总是在重启应用程序后)一些数据丢失了。一些新的购物车已经消失,旧的购物车已经完全处理,再次打开(因此状态更新尚未保存)。

我的一些保存操作需要几秒钟,所以我在后台执行这些操作,而用户可以继续操作。我唯一可以想象的是,这些保存操作排队等待重启会从内存中删除而不会被写入永久存储。

我尝试了以下内容,但没有成功:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self saveContext];
}

- (void)saveContext {
    NSError *error = nil;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }
}    

我的背景节省完成:

[managedObjectContext performBlock:^{
    [managedObjectContext save:nil];
    [managedObjectContext.parentContext performBlock:^{
        [managedObjectContext.parentContext save:nil];
    }];
}];    

1 个答案:

答案 0 :(得分:0)

可能您的后台保存已被系统终止。

Your implementation of this method has approximately five seconds to perform any tasks and return. If you need additional time to perform any final tasks, you can request additional execution time from the system by calling beginBackgroundTaskWithExpirationHandler:. In practice, you should return from applicationDidEnterBackground: as quickly as possible. If the method does not return before time runs out your app is terminated and purged from memory.

来自documentation