首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTableView崩溃

NSTableView崩溃
EN

Stack Overflow用户
提问于 2011-08-05 20:52:22
回答 1查看 556关注 0票数 0

建立了委托和数据源连接后,我有了以下控制器:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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崩溃,其中视图切换到包含表视图的选项卡。怎么啦?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-05 20:55:30

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

代码语言:javascript
复制
klist = [[NSArray arrayWithObjects: @"1", @"2", @"3", @"4", nil] retain];

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6956580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档