1

问题陈述

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

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

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

问题

如何将每个视图控制器的 moc 指向来自应用程序委托的同一个?

4

2 回答 2

1

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

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

和,

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

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

但是,通过这种方式,您将失去“它可以正常工作,您需要做的就是在情节提要中指定恢复标识符”的好处。

有谁知道更好的方法?显而易见的方法是从应用程序委托中检索它,但这确实是一种非首选方式,因此请不要推荐。除了概念层面的所有邪恶之外,从应用程序委托中检索它会扼杀使用可丢弃嵌套上下文的好处。

于 2013-04-15T06:38:49.320 回答
0

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

于 2019-10-25T21:34:13.733 回答