如果用户当前在我的编辑视图控制器中,我希望能够在用户关闭我的应用程序时保存更改。为此,我观察共享应用程序的UIApplicationWillTerminateNotification
。在我的应用委托中,我使用applicationWillTerminate:
方法关闭内容并释放所有核心数据上下文。
我发现的问题是,在任何观察者对applicationWillTerminate:
通知作出反应之前,app委托中的UIApplicationWillTerminateNotification
方法被称为。这意味着在编辑视图控制器有机会保存任何内容之前,我的核心数据堆栈已经发布并关闭了!
这通常如何克服,因为我看不到办法!
非常感谢,
迈克尔
答案 0 :(得分:4)
编辑: 由于运行循环和通知的内部工作原理,第一种(基于通知的)方法可能无效。
如果您想坚持使用基于通知的架构,您实际上可以在applicationWillTerminate:
内发布自己的通知。只需创建自己的MyApplicationWillTerminate
通知,然后在postNotification:
上致电[NSNotificationCenter defaultCenter]
即可。然后让您的编辑控制器注册MyApplicationWillTerminate
的实例,而不是默认的UIApplicationWillTerminateNotification
。
另一个选择是让您的应用委托存储编辑控制器的实例(如果它可见),然后在applicationWillTerminate:
中保存新信息,然后再发布核心数据上下文。但是,这会使用额外的实例变量污染您的应用程序委托,因此它可能不是最佳解决方案。
最后一个想法:为什么不让应用程序保存用户制作的任何编辑内容?这样,您不必担心应用程序在编辑一段信息时中途关闭 - 编辑已经保存,您可以直接发布Core Data的内容。 (这可能不适合您;如果不了解您的应用程序结构以及您正在编辑的数据,我真的不能说。)
答案 1 :(得分:0)
此处不确定,但NSManagedObjectContext是否保留其商店协调器和对象模型?在这种情况下,让控制器保留托管对象上下文是否足够?