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

时间:2009-11-16 20:05:03

标签: iphone core-data

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

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

这通常如何克服,因为我看不到办法!

非常感谢,

迈克尔

2 个答案:

答案 0 :(得分:4)

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

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

另一个选择是让您的应用委托存储编辑控制器的实例(如果它可见),然后在applicationWillTerminate:中保存新信息,然后再发布核心数据上下文。但是,这会使用额外的实例变量污染您的应用程序委托,因此它可能不是最佳解决方案。

最后一个想法:为什么不让应用程序保存用户制作的任何编辑内容?这样,您不必担心应用程序在编辑一段信息时中途关闭 - 编辑已经保存,您可以直接发布Core Data的内容。 (这可能不适合您;如果不了解您的应用程序结构以及您正在编辑的数据,我真的不能说。)

答案 1 :(得分:0)

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