错误NSOutlineView崩溃EXC_BAD_ACCESS代码= 13
问题描述:
我有NSOutlineView与自定义单元格命名ListCell。我将标签和图标设置到我的自定义单元格中。然后NSOutlineView出现错误exc_bad_access代码= 13。你有什么想法,如何修复它? Thx回复。错误NSOutlineView崩溃EXC_BAD_ACCESS代码= 13
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
return [[[DataSingleton sharedData] pages] count];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return NO;
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return item;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
ListTableCellView *cell = [outlineView makeViewWithIdentifier:@"ListCell" owner:self];
cell.label.stringValue = [NSString stringWithFormat:@"%ld", index + 1];
[cell.label setBackgroundColor:[NSColor clearColor]];
if ([self.icons objectForKey:[NSString stringWithFormat:@"%ld", index]])
[[cell icon] setImage:[self.icons objectForKey:[NSString stringWithFormat:@"%ld", index]]];
return cell;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item {
return YES;
}
答
只是我将NSOutlineView更改为NSTableView,一切正常。
答
这些方法是数据源委托方法。因此,他们应该只关注处理数据。你在这里做什么对我来说没有意义。
该视图将期望它可以在其表格单元的setStringValue:
等方法中使用的对象。在-outlineView:objectValueForTableColumn:byItem:
回馈一个自定义单元可能会混淆它。
此外,我不认为你正在处理计数正确。 -outlineView:numberOfChildrenOfItem:
应该返回子项的计数传递到的项目。在-outlineView:child:ofItem:
传递的索引可以是任何地方之间0和那个计数 - 1.
此外,我认为你需要确保你返回的项目是一致的调用-reloadData
。因此,如果视图要求子项5为零(nil表示“根级别”项目),则应每次返回相同的对象。我没有在任何地方看到过这个文件,但是我在运行中产生对象时曾遇到类似的问题。