4

这很奇怪。我有一个超级简单的项目来学习 NSTableView,它在我的 nib 中设置,设置为基于 View 的 tableView。我还设置了数据源并委托给我的控制器对象。

然而,当我这样做并运行时,我得到一个 EXC_BAD_ACCESS,跟踪从我的主函数开始,堆栈的其余部分在 Cocoa 内部(所以不是我的代码)。

除了这个项目使用 ARC(它是一个新项目,所以这是默认设置)之外,真的没有什么特别的事情发生。

我还尝试使用分析器来确保我没有在任何地方不正确地进行内存管理并且没有任何问题。

如果我不设置数据源/委托,我不会崩溃,但显然这不是构建我的应用程序的好方法!

有任何想法吗?

编辑

委托和数据源都在 IB 中设置。代码如下(基于视图)。重要的是要注意,无论此代码是否存在,我都会崩溃,并且在任何一种情况下都是相同的崩溃:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return 5;
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTextField *cell = [tableView makeViewWithIdentifier:@"MyView" owner:self];

    if (nil == cell) {
        cell = [[NSTextField alloc] initWithFrame:CGRectZero];


        cell.identifier = @"MyView";
    }


    [cell setStringValue:[NSString stringWithFormat:@"Row %d", row + 1]];

    return cell;
}
4

1 回答 1

5

这很简单!

我一直(有点故意)试图泄漏一个变量(因为我懒得做一个实例变量......在这里编写快速代码),但当然 ARC 为我处理了这个泄漏,导致整个事情都崩溃了向上。

所以,我只需要创建一个strong属性,这样我试图保留的对象(哪个对象充当我的 tableView 的委托和数据源)不会被过早释放。

于 2011-08-14T17:29:05.750 回答