使用ARC在Lion上查看基于NSTableView的EXC_BAD_ACCESS

jbr*_*nan 4 macos cocoa nstableview automatic-ref-counting osx-lion

这很奇怪.我有一个超级简单的项目来学习NSTableView,它在我的nib中设置,设置为基于视图的tableView.我还设置了dataSource并委托给我的控制器obejct.

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

除了这个项目使用ARC(这是一个新项目,所以这是默认项目)之外,真的没有任何花哨的事情发生.

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

如果我没有设置dataSource/delegate,我不会崩溃,但显然这不是构建我的应用程序的好方法!

有任何想法吗?

编辑

委托和dataSource都在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;
}
Run Code Online (Sandbox Code Playgroud)

jbr*_*nan 5

这很简单!

我曾经(有点故意)试图泄漏一个变量(因为我懒得制作一个实例变量......在这里编写快速代码),但当然ARC为我处理了这个漏洞,导致整个事情被打破起来.

所以,我只需要创建一个strong属性,这样我试图坚持的对象(哪个对象充当我的tableView的委托和dataSource)就不会过早发布.