Ios 如何从App Delegate使用托管对象上下文实例化已还原的视图控制器? 问题陈述

Ios 如何从App Delegate使用托管对象上下文实例化已还原的视图控制器? 问题陈述,ios,core-data,ios6,restore,Ios,Core Data,Ios6,Restore,在我的应用程序中,我在我的应用程序委托的应用程序willfinishlaunchingwithoptions方法中实例化了一个托管对象上下文(moc)。在正常操作期间,我通过为每个视图控制器设置的自定义initWithMoc初始化方法将相同的moc传递给层次结构中的所有视图控制器 一切正常,但现在我尝试使用iOS6的内置状态恢复功能 当我进入视图控制器中的带有RestorationIdentifierPath的viewControllerWithRestorationIdentifierPath

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

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

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

问题: 如何将每个视图控制器的moc指向来自应用程序代理的同一个moc?

根据苹果的

值得注意的是,如果为视图指定恢复类 控制器,UIKit不会尝试查找视图控制器 含蓄地

以及

如果选择使用还原类,则 viewControllerWithRestorationIdentifierPath:coder:方法应 创建类的新实例,执行一些 初始化,并返回结果对象

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

然而,通过这样做,您失去了“的好处,它可以正常工作,您需要做的就是在故事板中指定恢复标识符。”

有人知道更好的方法吗?显而易见的方法是从AppDelegate中检索它,但这确实是一种非首选的方式,所以请不要推荐这样做。除了概念层面上的所有邪恶之外,从app delegate中检索它会扼杀使用可丢弃嵌套上下文的好处。

根据苹果的

值得注意的是,如果为视图指定恢复类 控制器,UIKit不会尝试查找视图控制器 含蓄地

以及

如果选择使用还原类,则 viewControllerWithRestorationIdentifierPath:coder:方法应 创建类的新实例,执行一些 初始化,并返回结果对象

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

然而,通过这样做,您失去了“的好处,它可以正常工作,您需要做的就是在故事板中指定恢复标识符。”


有人知道更好的方法吗?显而易见的方法是从AppDelegate中检索它,但这确实是一种非首选的方式,所以请不要推荐这样做。除了概念层面上的所有邪恶之外,从app delegate中检索它会扼杀使用可丢弃嵌套上下文的好处。

一种方法是注册您的
NSPersistentContainer
子类或自己的核心数据堆栈对象(选择UIStateRestoring协议)通过
UIApplication
registerObjectForStateRestoration
,然后在视图控制器子类的还原方法中对指针进行编码和解码。

一种方法是注册您的
NSPersistentContainer
子类或自己的核心数据堆栈对象(选择UIStateRestoring协议)通过
UIApplication
注册表对象进行状态恢复
,然后在视图控制器子类的恢复方法中对指针进行编码和解码。

Aha。我明白了,现在你明确地说出来了,我意识到我又一次考虑过了一切。我一直不相信“它只是工作”的承诺,并试图做太多。我把所有多余的、不必要的工作都拿了出来,它确实按照我的承诺工作了。(我陷入了一个泥潭,试图为多个对象返回VC层次结构,这显然不适合我。)谢谢你的帮助。啊哈。我明白了,现在你明确地说出来了,我意识到我又一次考虑过了一切。我一直不相信“它只是工作”的承诺,并试图做太多。我把所有多余的、不必要的工作都拿了出来,它确实按照我的承诺工作了。(我陷入了一个泥潭,试图为多个对象返回VC层次结构,这显然对我不起作用。)谢谢你的帮助。