cocoa - NSTableView 崩溃

标签 cocoa nstableview

建立委托(delegate)和数据源连接后,我有以下 Controller :

#import <Foundation/Foundation.h>

@interface KextTable : NSObject <NSTableViewDataSource> {
@private
    NSArray *klist;
}
- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView
objectValueForTableColumn:(NSTableColumn *)tableColumn
            row:(int)row;
@end

#import "KextTable.h"


@implementation KextTable

- (id)init
{
    self = [super init];
    if (self) { 
}    
    return self;
}

-(void) awakeFromNib 
{
    klist = [[NSArray alloc] init];

    klist = [NSArray arrayWithObjects: @"1", @"2",
             @"3", @"4", nil]; // debugging values only
}

- (void)dealloc
{
    [super dealloc];
}

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

- (id)tableView:(NSTableView *)tableView
objectValueForTableColumn:(NSTableColumn *)tableColumn
            row:(int)row
{
    return [klist objectAtIndex:row];
}

@end

此代码在我的主界面控件中因 EXC_BAD_ACCESS 而崩溃,其中 View 切换到包含 TableView 的选项卡。怎么了?

(我知道连接是正确的,如果我在 objectValueForTableColumn 中创建数组,它就可以工作)

最佳答案

这是因为您正在创建的 klist(调试列表)正在使用自动释放它的构造函数。所以你应该添加:

klist = [[NSArray arrayWithObjects: @"1", @"2", @"3", @"4", nil] retain];

请务必注意,您所做的操作存在内存泄漏(您创建了一个 NSArray,然后将变量重新分配给其他内容...)

关于cocoa - NSTableView 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6956580/

相关文章:

macos - NSFileManager 删除项目路径 :error: does not respect POSIX permissions

swift - 获取 NSTableView 中自定义 NSTableCellView 的位置

objective-c - 在标准 NSWindow 上创建自定义标题栏

cocoa - SplitView 未正确调整 subview 中 NSTableView 的大小

objective-c - 如何在 NSTableView 中选择一个 NSCell?

objective-c - Objective C 类初始化

cocoa - 命名多个 NSButton

macos - 为什么 NSSpeechSynthesizer 在 OS X 上输出空文件? ( swift 2)

macos - Apple 帮助手册教程

swift - 使用 swift 用 NSPopupButtonCell 填充 NSTableView 行