【问题标题】:How do I Instantiate Restored View Controllers with Managed Object Context from App Delegate?如何使用来自 App Delegate 的托管对象上下文实例化恢复的视图控制器?
【发布时间】:2013-04-13 22:24:45
【问题描述】:

问题陈述

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

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

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

问题

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

【问题讨论】:

    标签: ios core-data ios6 restore


    【解决方案1】:

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

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

    和,

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

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

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

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

    【讨论】:

    • 啊哈。我明白了,既然你具体说明了这一点,我意识到我又在想所有事情了。我一直不相信“它只是有效”的承诺,并试图做太多事情。我拿出了所有多余的、不必要的工作,它确实按承诺工作。 (我陷入了试图为多个对象返回 VC 层次结构的泥潭,这显然对我没有用。)感谢您的帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多