【发布时间】:2015-08-01 01:07:07
【问题描述】:
我正在编写一个具有NSOutlineView 的应用程序和一个实现NSOutlineViewDataSource 的接口。但是,在运行时,应用程序崩溃并显示一条消息已发送到已释放实例的错误。我对僵尸和仪器进行了一些调试,并找到了被释放的地址。
我不太明白这里发生了什么。我已经确定,如果我为 ViewController.m 禁用 ARC,它不会出现段错误。这是相关代码。
-(void)viewDidLoad {
[super viewDidLoad];
NSArray * array = [[NSArray alloc]initWithObjects:@"chrisdotcode",@"Mop",@"ollien", nil];
[self.namesList setDataSource:[[ArrayOutlineDataSource alloc] init:array]];
}
这里是 ArrayOutlineDataSource,它实现了 NSOutlineViewDataSource。
@implementation ArrayOutlineDataSource
-(id)init:(NSArray *)array{
self.array = array;
return [super init];
}
-(id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item{
return self.array[index];
}
-(BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item{
return false;
}
-(NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item{
NSLog(@"Item:%@",item);
NSLog(@"Item count:%lu",(unsigned long)[self.array count]);
return [self.array count];
}
-(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item{
return self.array;
}
@end
【问题讨论】:
标签: objective-c macos automatic-ref-counting