【问题标题】:Can't access managed object context when view is initializing视图初始化时无法访问托管对象上下文
【发布时间】:2011-08-25 14:56:40
【问题描述】:

我正在使用具有以下配置的 MainWindow.xib 文件:

MainWindow.xib

  • UITabBar 控制器
    • UINavigationBarController
      • UITableViewControllerAlpha
    • UINavigationBarController
      • UITableViewControllerBeta
    • UINavigationBarController
      • UITableViewController查理

但基于以下帖子: Why does Core Data initialization fail when I attempt to do it at these points? 以及我放置的断点,我得出的结论是 initWithCoder 被用于初始化所有 UITableViewControllers,并且在应用程序生命周期的那个时刻没有办法可靠地使用 managedObjectContext。

那么这是否意味着我必须放弃我在 MainWindow.xib 中执行的所有“简单”设计工作和布局并以编程方式进行?使用核心数据真的意味着不能使用 NIB 文件吗?还是有一些中间立场?

请告诉我,谢谢!

【问题讨论】:

    标签: cocoa-touch core-data xib nib


    【解决方案1】:

    同时使用 Core Data、表视图和 NIB 没有问题。我认为您需要从 MOC 中为您的表视图获取一些对象,而当您需要这样做时,您在查找 MOC 时遇到了问题。

    这种方法对我有用:

    • 将 nib 定义为目标的主界面。
    • 在 nib 中加载导航控制器和根视图控制器。
    • applicationDidFinishLaunching: 中设置根视图控制器的managedObjectContext 属性
    • 在根视图控制器的viewDidLoad 中从 MOC 获取

    所以,先试试这个:

    • 让应用委托在applicationDidFinishLaunching: 中设置控制器的managedObjectContext
    • viewDidLoad 而不是initWithCoder 中进行提取。

    如果这不起作用,您至少还有以下选择:

    1. applicationDidFinishLaunching: 中设置控制器的managedObjectContext,但在调用数据源方法之前不要获取数据。在这些方法中,如果尚未完成提取,则有条件地完成提取。

    2. 在你的控制器上写一个类似loadDataFromMOC:的方法,它既设置MOC又从中获取,并从applicationDidFinishLaunching:调用它。

    【讨论】:

      猜你喜欢
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2022-10-15
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多