视图初始化时无法访问托管对象上下文

时间:2011-08-25 14:56:41

标签: cocoa-touch core-data xib nib

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

的MainWindow.xib

  • 的UITabBarController
    • UINavigationBarController
      • UITableViewControllerAlpha
    • UINavigationBarController
      • UITableViewControllerBeta
    • UINavigationBarController
      • UITableViewControllerCharlie

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

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

请告诉我,谢谢!

1 个答案:

答案 0 :(得分:0)

将Core Data,表视图和NIB一起使用没有问题。我认为您需要从MOC中获取一些用于表视图的对象,并且在您需要时找到MOC时遇到问题。

这种方法对我有用:

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

所以,先试试这个:

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

如果这不起作用,您仍然至少有以下选项:

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

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