Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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 申请将终止通知&;保存草稿(核心数据)_Iphone_Core Data - Fatal编程技术网

Iphone 申请将终止通知&;保存草稿(核心数据)

Iphone 申请将终止通知&;保存草稿(核心数据),iphone,core-data,Iphone,Core Data,如果用户当前在我的编辑视图控制器中,我希望在用户关闭我的应用程序时能够保存更改。为此,我观察了共享应用程序的UIApplicationWillTerminateNotification。在我的应用程序委托中,我使用applicationWillTerminate:方法关闭并释放所有核心数据上下文 我发现的问题是,在任何观察者对UIApplicationWillTerminateNotification通知做出反应之前,会调用应用程序委托中的applicationWillTerminate:方法。

如果用户当前在我的编辑视图控制器中,我希望在用户关闭我的应用程序时能够保存更改。为此,我观察了共享应用程序的
UIApplicationWillTerminateNotification
。在我的应用程序委托中,我使用
applicationWillTerminate:
方法关闭并释放所有核心数据上下文

我发现的问题是,在任何观察者对
UIApplicationWillTerminateNotification
通知做出反应之前,会调用应用程序委托中的
applicationWillTerminate:
方法。这意味着在我的编辑视图控制器有机会保存任何内容之前,我的核心数据堆栈已经被释放并关闭

这通常是如何克服的,因为我看不见路

非常感谢,

Michael

编辑:由于运行循环和通知的内部工作机制,第一种(基于通知的)方法可能无法工作

如果您想坚持使用基于通知的体系结构,实际上可以在
applicationWillTerminate:
中发布自己的通知。只需创建自己的
MyApplicationWillTerminate
通知,然后在
[NSNotificationCenter defaultCenter]
上调用
postNotification:
。然后让编辑控制器注册
MyApplicationWillTerminate
的实例,而不是默认的
UIApplicationWillTerminateNotification

另一种选择是让应用程序代理存储编辑控制器的实例(如果该实例可见),然后在
应用程序中终止:
在释放核心数据上下文之前保存新信息。但是,这会用额外的实例变量污染你的应用程序委托,因此它可能不是最佳解决方案


最后一个想法:为什么不让应用程序保存用户所做的任何编辑?这样,你就不必担心应用程序在编辑一条信息的过程中会中途关闭——编辑内容已经保存,你只需按原样发布核心数据即可。(这可能不适合您;如果不了解更多关于您的应用程序结构和您正在编辑的数据,我真的不能这么说。)

此处不确定,但NSManagedObjectContext是否保留其存储协调器和对象模型?在这种情况下,让控制器保留托管对象上下文是否足够?

+1用于在用户进行编辑时保存草稿;在终止过程中,做任何有用或复杂的事情的时间是非常有限的。关于在编辑发生时保存编辑的有趣之处。我可以调查一下。当您提到发布我自己的通知时,它们不会在下一次运行循环中被拾取,并且在
应用程序终止:
代码完成后被拾取吗?因为所有的代码都在同一个(主)线程上。迈克尔:你可能是对的——我在发布我的答案(现在已编辑)后就意识到了这一点。您可能最好在编辑发生时保存它们,从而完全避开这个问题。我刚刚有了一个想法!我注意到编辑视图控制器的
视图将消失:
方法在
应用程序终止之前被调用:
。这样我就可以保存我的草稿了!这不是一个非常复杂的保存,只是一个包含一些数据位的plist,所以我认为在terminate上执行保存会很好。任何想法或可能的缺点?你可以,但请记住,一旦用户按下home(主页)按钮,Springboard会给你的应用程序一段短时间(大约4或5秒)自行关闭,否则它会为你终止应用程序。这看起来像一个冻结的应用程序和崩溃的用户,这不是一件好事。此外,即使你只花了一两秒钟,你也会给人一种设备速度减慢的印象,因为按键和主屏幕之间存在延迟。所以,当你能做到的时候,是的,问问你自己:你应该做到吗?能不能足够快地做到?