NSOutlineView在错误EXC_BAD_ACCESS代码= 13时崩溃

时间:2013-05-08 15:23:23

标签: objective-c cocoa nsoutlineview

我有名为ListCell的自定义单元格的NSOutlineView。我将标签和图标设置为我的自定义单元格。然后NSOutlineView在错误exc_bad_access code = 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;
}

2 个答案:

答案 0 :(得分:1)

这些方法是数据源委托方法。因此,他们应该只关心处理数据。你在这做什么对我没有意义。

视图将期望它可以在其表格单元格的setStringValue:等方法中使用的后退对象。在-outlineView:objectValueForTableColumn:byItem:中提供自定义单元格可能会让人感到困惑。

另外,我认为你没有正确处理这些计数。 -outlineView:numberOfChildrenOfItem:应该将子项的计数返回到传入的项目。-outlineView:child:ofItem:中传递的索引可以是介于0和该计数之间的任何位置 - 1.

此外,我认为您需要确保在-reloadData的调用之间返回的项目是一致的。因此,如果视图要求项目nil的子项5(nil表示“根级别”项目),则每次都应始终返回相同的对象。我没有在任何地方看到过这种情况,但是在我动态生成对象时,我遇到了类似的问题。

答案 1 :(得分:-4)

我只是将NSOutlineView更改为NSTableView,一切正常。