视图初始化时无法访问托管对象上下文
Posted
技术标签:
【中文标题】视图初始化时无法访问托管对象上下文【英文标题】: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 文件吗?还是有一些中间立场?
请告诉我,谢谢!
【问题讨论】:
【参考方案1】:同时使用 Core Data、表视图和 NIB 没有问题。我认为您需要从 MOC 中为您的表视图获取一些对象,而当您需要这样做时,您在查找 MOC 时遇到了问题。
这种方法对我有用:
将 nib 定义为目标的主界面。 在 nib 中加载导航控制器和根视图控制器。 在applicationDidFinishLaunching:
中设置根视图控制器的managedObjectContext
属性
在根视图控制器的viewDidLoad
中从 MOC 获取
所以,先试试这个:
让应用委托在applicationDidFinishLaunching:
中设置控制器的managedObjectContext
在viewDidLoad
而不是initWithCoder
中进行提取。
如果这不起作用,您至少还有以下选择:
在applicationDidFinishLaunching:
中设置控制器的managedObjectContext,但在调用数据源方法之前不要获取数据。在这些方法中,如果尚未完成提取,则有条件地完成提取。
在你的控制器上写一个类似loadDataFromMOC:
的方法,它既设置MOC又从中获取,并从applicationDidFinishLaunching:
调用它。
【讨论】:
以上是关于视图初始化时无法访问托管对象上下文的主要内容,如果未能解决你的问题,请参考以下文章