Core Data中的实体是否会保持其状态是否在托管上下文iOS上调用save?

Vir*_*Max 0 iphone xcode core-data objective-c ios

我在我的应用程序中使用Core Data.

我的问题是Entities(NSManagedObject)持久化状态,无论我是否调用Save NSManagedObjectContext,只有条件是应用程序处于活动状态.当我终止应用程序并再次运行它时,所有实体都会保留最后一个属性或在调用最后一个" Saveon NSManagedObjectContext" 之前所做的更改.

例如.我有OpenViewControllerFormOpenViewController.

FormOpenViewController适用于(Form *)entity(NSManagedObject).

OpenViewController从数据库调用FormOpenViewController和获取(Form *)对象并将其传递给FormOpenViewController的(Form *)form对象.

viewDidLoadFormOpenViewController我改变一个属性的值" editable"的(Form *)form对象为" YES".

FormOpenViewController.m

- (void)viewDidLoad
{
     // changed the editable property of form to yes from no
     if([formEditData.editable boolValue] == NO)
     {
          form.editable = [NSNumber numberWithBool:YES];
     }

}

-(void)saveData
{
    [[shareInstance delegate].managedObjectContext save:nil];
    [shareInstance delegate].arrForder = [[ipegsClient shareInstance ] getLoginUser].folders.allObjects;
}
Run Code Online (Sandbox Code Playgroud)

所以现在如果我回去OpenViewController没有调用saveData方法,并再次来FormOpenViewController控制不进入if块,这意味着它的表单对象现在具有"可编辑"属性为" YES"应该是" NO"因为直到我没有" saveData功能".

更新:

我在FormOpenViewController每次调用或呈现它时都会创建新实例.并且(Form *) form在调用之前每次都从数据库中获取新对象FormOpenViewController.

编辑:

在applicationWillTerminate中调用以下函数:

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

            abort();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

提前致谢.如果我在某个地方出错了,请纠正我.

jrt*_*ton 7

这就是核心数据的工作原理.

将托管对象上下文视为内存暂存器,用于您正在进行的任何更改.当您更改对象时,只要您使用该上下文,该更改就是"真实的".

如果保存上下文,那些更改将写入下一级别,即父上下文或磁盘上的持久存储.

如果在不保存的情况下销毁上下文,则会丢失这些更改.

如果要还原或撤消在特定会话期间所做的更改,则最简单的方法是创建子上下文并将其传递给编辑视图控制器.如果您随后"取消"编辑视图控制器,只需销毁子上下文,您的更改将丢失.否则,保存上下文,它们将传递到主上下文.

因此,在不保存上下文的情况下终止应用程序意味着下次启动时,上下文是根据持久性存储中的数据构建的,该数据没有写入更改.