如何通过应用程序委托使用托管对象上下文实例化还原的视图控制器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过应用程序委托使用托管对象上下文实例化还原的视图控制器?相关的知识,希望对你有一定的参考价值。

问题陈述

在我的应用程序中,我在我的应用程序委托中的applicationWillFinishLaunchingWithOptions方法中实例化了一个托管对象上下文(moc)。在正常操作期间,我通过为每个视图控制器设置的自定义initWithMoc初始化方法将该同一个Moc传递给层次结构中的所有视图控制器。

一切正常,但现在我正尝试使用ios6的内置状态恢复功能。

[当我进入视图控制器中的viewControllerWithRestorationIdentifierPath恢复方法时,我不确定如何从应用程序委托访问新创建的Moc。

问题

如何从应用程序委托中将每个视图控制器的Moc指向相同的Moc?

答案

根据Apple的iOS App Programming Guide: State Preservation and Restoration

值得注意的是,如果您为视图指定还原类控制器,UIKit不会尝试找到您的视图控制器隐式地。

如果您选择使用还原类,则您的viewControllerWithRestorationIdentifierPath:coder:方法应该创建该类的新实例,执行一些最少的操作初始化,然后返回结果对象。

您将能够使用旧的initWithMOC:方法创建子视图控制器的实例,以供状态保留和恢复API使用。

通过这种方式,但是您失去了'它的工作原理,而您需要做的就是在情节提要中指定恢复标识符'。

有人知道更好的方法吗?最明显的方法是从应用程序委托中检索它,但这实际上是一种非首选的方法,因此请不要这样做。除了概念上的所有弊端之外,从应用程序委托中检索邪恶还杀死了使用可丢弃的嵌套上下文的好处。

另一答案

一种方法是通过NSPersistentContainerUIApplication注册您的registerObjectForStateRestoration子类或自己的Core Data堆栈对象(使用UIStateRestoring协议,然后在视图控制器子类的恢复方法中对指针进行编码和解码。] >

以上是关于如何通过应用程序委托使用托管对象上下文实例化还原的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

NSLock 实例应该是“全局的”吗?

为啥委托方法需要将自定义类托管对象上下文的内容保存在委托类托管对象上下文中?

在C#中实例化托管COM对象

如何安全地删除未保存的托管对象?

关于C#委托应用与总结

使用 Core Data 时的模型实例化问题