在iOS上保存NSManagedObjectContext的快速和/或保存方式

在iOS上保存NSManagedObjectContext的快速和/或保存方式,ios,xcode,core-data,save,nsmanagedobjectcontext,Ios,Xcode,Core Data,Save,Nsmanagedobjectcontext,我正在创建一个用于显示Cora数据对象的应用程序。应用程序不应该创建或删除实体,但我想让用户有机会将实体添加到他们的收藏夹中。为此,我添加了一个布尔“isFavorite”属性。当用户添加实体时,我会像这样更新它: [_currentObject setValue:[NSNumber numberWithBool:YES] forKey:@"isFavorite"]; [_managedObjectContext refreshObject:_currentObject mergeChanges

我正在创建一个用于显示Cora数据对象的应用程序。应用程序不应该创建或删除实体,但我想让用户有机会将实体添加到他们的收藏夹中。为此,我添加了一个布尔“isFavorite”属性。当用户添加实体时,我会像这样更新它:

[_currentObject setValue:[NSNumber numberWithBool:YES] forKey:@"isFavorite"];
[_managedObjectContext refreshObject:_currentObject mergeChanges:YES];
- (void)applicationDidEnterBackground:(UIApplication *)application
{
     [self saveContext];
}

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
             NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
    NSLog(@"save done...");
}
当应用程序关闭时,我按如下方式保存上下文:

[_currentObject setValue:[NSNumber numberWithBool:YES] forKey:@"isFavorite"];
[_managedObjectContext refreshObject:_currentObject mergeChanges:YES];
- (void)applicationDidEnterBackground:(UIApplication *)application
{
     [self saveContext];
}

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
             NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
    NSLog(@"save done...");
}
这很好,但问题是,完成保存大约需要10秒。当用户按下home按钮然后关闭应用程序(双击homebutton)时,上下文不会完全保存

是否有更快(或保存)的方法来保存上下文?我不需要再次保存孔文件,只需保存已更改的对象


我的文件是二进制文件,大小约为5 MB,随着添加更多数据,它会增加。

您可以尝试迁移到SQL存储。性能更好。我已经试过了,但我的一些复杂关系似乎不能与SQL存储类型一起工作……你是什么意思?你能提供一些细节吗?从高级角度来看,二进制或SQL存储是相同的。