Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据并将上下文保存在SubViewController中,确定要发布吗?_Iphone_Objective C_Xcode_Core Data - Fatal编程技术网

Iphone 核心数据并将上下文保存在SubViewController中,确定要发布吗?

Iphone 核心数据并将上下文保存在SubViewController中,确定要发布吗?,iphone,objective-c,xcode,core-data,Iphone,Objective C,Xcode,Core Data,更新managedObjectContext时,在可能被释放的视图控制器中执行保存设置是否可行,或者appDelegate是否应处理managedObjectContext的保存,以便即使释放了viewController,保存也会完成 我倾向于将保存步骤移动到我的appDelegate中,并让ViewController调用[appDelegate saveContext];当进行更新时,尽管这可能没有意义,因为viewController在完成保存到CD之前都不会完成发布 例如,从subVi

更新managedObjectContext时,在可能被释放的视图控制器中执行保存设置是否可行,或者appDelegate是否应处理managedObjectContext的保存,以便即使释放了viewController,保存也会完成

我倾向于将保存步骤移动到我的appDelegate中,并让ViewController调用[appDelegate saveContext];当进行更新时,尽管这可能没有意义,因为viewController在完成保存到CD之前都不会完成发布

例如,从subViewController执行的这两个操作之间是否有任何区别:

[appDelegate.managedObjectContext save:&error]

其中,appDelegate中有一个运行[managedObjectContext保存:&错误]的方法

谢谢,
Sam

如果您在应用程序中只使用一个managedObjectContext,那么在应用程序委托中保留保存功能不是一个坏主意,这样无论应用程序生命周期中视图控制器的状态如何,应用程序终止时都会保存任何更新

也就是说,我发现添加额外的保存点很有用,有时是在视图控制器中,在执行一些重要更新后,这些保存点将保存数据库。这样,即使应用程序崩溃或最终保存操作无法完成,我也可以保存数据


我是核心数据的新手,因此如果这是一种不好的做法,请通知我。

猜测您的应用程序是单线程的,您可以保证在释放视图控制器之前完成保存,因为该线程将阻止保存

如果您正在运行多线程应用程序;然后

  • 您不应该在后台线程上保存,这在核心数据中是危险的

  • 您不应该在后台线程上访问视图控制器,因为所有与视图相关的活动都应该在主线程上执行


  • 因此,没有“正确”的情况下,您必须担心
    -保存:
    无法完成,无论您从哪个对象调用它,因为它是一个阻塞调用。

    是的,这就是我的学习方式。我想知道如果VC被释放或者在[context save]完成之前它不会完全释放,那么在viewController中使用[context save]步骤是否会导致问题。啊,是的,我忘了。我正在运行一个多线程应用程序,并根据线程应用程序文档中的建议更新coreData(在线程中进行复制和更新,在主线程上进行合并)。感谢您在单线程环境中的确认。正如我提到的,即使您在多线程应用程序中,您的保存不会跨越线程边界,因此它将阻止它所在的线程,因此您仍然可以安全地从任何对象调用
    -save:
    ,只要在调用
    -save:
    后释放该对象即可
    [appDlegate saveContext]