gpt4 book ai didi

objective-c - 为什么我的 NSTableView 数据源方法出现 EXE_BAD_ACCESS 错误?

转载 作者:行者123 更新时间:2023-12-03 17:30:54 25 4
gpt4 key购买 nike

我最近决定重新开始 Cocoa/Objective-C 编程,我当前的项目需要 NSTableView。

我以为我已经把这个过程归结为一门科学,但看来我错了。我在实际返回数据的数据源方法中收到 EXE_BAD_ACCESS 错误。

当我运行应用程序时,所有结果都显示在 NSTableView 上,但不久之后,就会发生 EXE_BAD_ACCESS。有时,似乎是随机的,EXE_BAD_ACCESS 错误不会被抛出,相反,我会在控制台中收到各种错误,如下所示:

-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x10011b780

之后,界面几乎变得没有响应。

从各种调试消息中,我已经能够预测正在发生错误,因为使用大于数据 NSArray 计数的行整数调用该方法。是我的 Mac 出了问题还是我做错了什么?

下面是我的代码:

头文件(TableViewController.h)

#import <Cocoa/Cocoa.h>


@interface TableViewController : NSObject {
IBOutlet NSTableView *tableView;

NSArray *componentArray;
}

@end

主文件(TableViewController.m)

#import "TableViewController.h"


@implementation TableViewController

- (void) awakeFromNib {
NSString *components = @"Test:Test2:Test3";
componentArray = [components componentsSeparatedByString:@":"];

[tableView setDataSource:self];
[tableView reloadData];
}

- (int)numberOfRowsInTableView:(NSTableView *)tableView {
return [componentArray count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
// EXE_BAD_ACCESS is occuring here
return [componentArray objectAtIndex:row];
}

@end

最佳答案

componentArray = [components componentsSeparatedByString:@":"];

-componentsSeparatedByString: 方法返回一个 -autoreleased 数组。因此,当需要时,componentArray 可能不再有效。

您需要明确地-retain它。

componentArray = [[components componentsSeparatedByString:@":"] retain];

(当然,请确保在 -dealloc-release数组。或者只是打开垃圾收集并忘记内存管理。)

关于objective-c - 为什么我的 NSTableView 数据源方法出现 EXE_BAD_ACCESS 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603827/

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