gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:13:49 26 4
gpt4 key购买 nike

这很奇怪。我有一个 super 简单的项目来学习 NSTableView,它在我的 Nib 中设置,设置为基于 View 的 tableView。我还设置了数据源并委托(delegate)给我的 Controller 对象。

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

除了这个项目使用 ARC(这是一个新项目,所以这是默认值)之外,确实没有什么奇怪的事情发生。

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

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

有什么想法吗?

编辑

委托(delegate)和数据源均在 IB 中设置。代码如下(基于 View )。值得注意的是,无论是否存在此代码,我都会遇到崩溃,并且在任何一种情况下都会发生相同的崩溃:

- (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;
}

最佳答案

很简单!

我一直(有点故意)试图泄漏一个变量(因为我太懒了,无法创建一个实例变量...在这里编写快速代码),但是当然 ARC 为我解决了泄漏问题,导致了整个问题爆炸的东西。

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

关于cocoa - 使用 ARC 在 Lion 上查看基于 NSTableView EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com