【问题标题】:Yosemite: -[NSOutlineView _dataSourceValueForColumn:row:] EXC BAD ACCESS优胜美地:-[NSOutlineView _dataSourceValueForColumn:row:] EXC 错误访问
【发布时间】:2014-11-29 08:57:45
【问题描述】:

升级到 Yosemite 后,应用程序在使用 NSOutlineView 关闭 NSSheet 时崩溃。

例外是访问不正确。 似乎表的数据源发布得太早了。 数据源绑定在xib文件中,它是File Owner,一个NSWindowController。该表的填充覆盖了数据源方法。

这是异常堆栈:

【问题讨论】:

    标签: objective-c macos cocoa osx-yosemite


    【解决方案1】:

    我刚刚用 NSSheet 上的 NSTableView 解决了同样烦人的问题。我在优胜美地之前工作的代码是这样的:

    [self.mainWindowController.window endSheet:self.fileRenamingWindowController.window];
    self.fileRenamingWindowController = nil;
    

    我会关闭工作表并清除不必要的窗口控制器——就像优胜美地之前的魅力一样。

    然而,现在窗口和相应的视图层次似乎并没有与 endSheet: 同步销毁,所以在上面的代码中,当窗口控制器被释放时,窗口的内容会在短时间内超过它(可能直到关闭动画完成),例如导致 EXC_BAD_ACCESS NSTableView 将销毁的窗口控制器作为其委托/数据源。我通过覆盖窗口控制器的 dealloc 方法解决了这个问题,以确保没有人(即 tableView)通过弱引用持有它:

    self.tableView.delegate = nil;
    self.tableView.dataSource = nil;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多