在我的应用程序中,我在我的app委托中的applicationWillFinishLaunchingWithOptions
方法中实例化了一个托管对象上下文(moc)。在正常操作期间,我通过我为每个视图控制器设置的自定义initWithMoc初始化方法将同一个moc传递给我的层次结构中的所有视图控制器。
一切正常,但现在我尝试使用iOS6的内置状态恢复功能。
当我在视图控制器中进入viewControllerWithRestorationIdentifierPath
恢复方法时,我不确定如何从应用代理访问新创建的moc。
如何将每个视图控制器的moc指向应用代理中的同一个?
答案 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协议进行弹出),然后在查看控制器子类的还原方法。