NSTableview在启动时随机清空

时间:2011-03-11 16:48:36

标签: objective-c xcode core-data nstableview

我希望这是一个足够普遍的问题,一个相当广泛的问题可能有一个明显的答案。为什么我的NSTableView - 在应用程序加载后 - 有时会填充来自其连接的(核心数据)数据源的数据,有时候是空的。它似乎是随机的。退出和开始之间没有其他任何变化。

帮助:

  • NSTableView数据源是一个NSArrayController,其managedObjectContext绑定到实体核心数据模型。
  • NSTableViewNSArrayController都正确连接到出口和绑定。调试已经成功地用于我所考虑的任何测试,并且它随机工作的事实表明某些东西正在发挥作用。
  • 我将假设问题是我的项目的一个元素有时会及时加载而不是及时加载。我还假设NSArrayController在其他所有加载完成之前没有及时获取数据。我尝试在NSTableView完成加载后询问reloadDataNSArrayController来纠正这个问题:

[jobsController addObserver:self forKeyPath:@"arrangedObjects.jobTitle" options:0 context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (object == jobsController)
    {
        NSLog(@"jobsController finished loading");
        [tableView reloadData];
    }
}

我还使用了一个单独的测试按钮进行测试,该按钮在我点击它时触发了reloadData NSTableView。这没有效果。对缺乏代码表示歉意。该项目相当大,很难将代码与此问题隔离开来。我希望这个问题足够普遍,答案可能是从类似的经验中确定的。

<小时/> 的更新

我非常有信心这与NSArrayController没有准备好(因为arrangedObjects的日志在表格没有填充时显示空集,反之亦然一样)。为了扩展我的设置,我还有两个NSArrayController s(总共3个)。填充NSTableView的控制器是一个控制器的子控制器,它是另一个控制器的子控制器。我有一个理论,表只有在NSArrayControllers的加载顺序是(巧合)parent&gt;时才会填充。父母&gt;父级,因为每个孩子的内容集依赖于其父NSArrayController。也许我的解决方案是手动选择控制器的加载顺序?

2 个答案:

答案 0 :(得分:2)

在tableview的awakeFromNib方法中,调用数组控制器的fetch方法。这将使用所需的数据填充数组控制器,以便您调用reloadData实际上有要加载的数据。

答案 1 :(得分:0)

我找到了答案,并认为这种情况对其他人来说可能是可重复的,所以希望这对他们有用。我将NSArrayController的“内容集”设置为其父NSArrayController反向关系。当我想用仅包含父数组的选定信息填充子数组时,这在项目的早期就有意义了。

在这种情况下,不再需要此功能,因此我忘记了它的行为方式。因此,当应用程序启动时,它(似乎)在顶部NSArrayController中随机选择一个对象,并使用仅与其所选父项相关的对象填充其子NSArrayController。如果其中任何一个为空,则会导致没有任何对象过滤到填充NSTableView的子NSArrayController,并解释为什么它似乎随机填充它的感觉。