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

时间:2013-04-13 22:24:45

标签: ios core-data ios6 restore

问题陈述

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

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

当我在视图控制器中进入viewControllerWithRestorationIdentifierPath恢复方法时,我不确定如何从应用代理访问新创建的moc。

问题

如何将每个视图控制器的moc指向应用代理中的同一个?

2 个答案:

答案 0 :(得分:1)

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

  

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

  

如果您选择使用恢复类,则执行您的   viewControllerWithRestorationIdentifierPath:coder:方法应该   创建一个新的类实例,执行一些最小的   初始化,并返回结果对象。

您将能够使用旧版initWithMOC:方法创建子视图控制器实例,以便 State Preservation and Restoration API 使用。

通过这种方式这样做,但是你失去了“它的好处,它只是起作用,你需要做的就是在故事板中指定恢复标识符”。

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

答案 1 :(得分:0)

一种方法是通过NSPersistentContainer的{​​{1}}注册UIApplication子类或自己的Core Data堆栈对象(使用UIStateRestoring协议进行弹出),然后在查看控制器子类的还原方法。