【问题标题】:Core Data not loaded into NSArrayController IB binding核心数据未加载到 NSArrayController IB 绑定中
【发布时间】:2015-03-13 04:14:26
【问题描述】:

全部,
我束手无策,试图弄清楚这一点。我有一个 NSViewController ,其中包含一个 NSArrayController 和一个其 dataSource 设置为视图控制器的表。 NSArrayController 在 IB 中设置为包含核心数据实体对象。准备内容和自动重新排列内容设置为是。 MOC 绑定已设置。 filterPredicate 和 sortDescriptor 有绑定。当我的 NSViewController 被加载时,方法 numberOfRowsInTableView: 被调用,但我的 NSArrayController 不包含任何数据。显示/加载所有内容后, NSArrayController 似乎包含数据(如果我添加另一个 Entity 对象,则显示所有对象)。我试过调用重新排列对象,但这似乎不起作用。有什么想法吗?

【问题讨论】:

  • 为什么要使用数据源协议?您应该只将表绑定到数组控制器。您可以尝试在 AC 上调用 fetch:withRequest**——没有任何东西绑定到它的排列对象,所以它可能从未获取它们——但是如果你没有得到最后一英里并将控制器绑定到视图。 ** fetch 推迟到下一次运行循环迭代,所以它在你的数据源方法中没有用,你需要 withRequest 版本。
  • 在这种特殊情况下,表格的格式与实体的数据不匹配 1:1。为了使数据对用户更具可读性,我选择使用数据源协议。

标签: macos core-data cocoa-bindings nsarraycontroller


【解决方案1】:

当您在绑定的帮助下在 IB 中设置托管对象上下文时,NSArrayController's fetch 将作为在设置托管对象上下文后执行的延迟操作(通过 nib 加载)执行。因此,这发生在awakeFromNib:windowControllerDidLoadNib: 之后。

因此,当加载视图控制器时,在设置 NSArrayController's 托管对象上下文属性之前调用方法 NumberOfRowsInTableView:。因此,此时NSArrayControoler 返回零。

当您再次调用 tableView 的 reloadData 时 NumberOfRowsInTableView: 并且此时 NSArrayController 包含数据,因为它的提取已经执行。

【讨论】:

  • 感谢您如此详尽地解释启动过程。正是我正在寻找的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多