我正在尝试在我的xib中将一个NSTableView嵌套在另一个基于视图的tableview中。当我这样做时,我得到以下构建错误(当尝试编译xib时):
An instance of NSTableColumn with object ID jRp-dg-jOe did not archive its child (NSTableCellView) with an object of ID y8a-qz-ChK
有人看过这个,或者知道如何修复它?
我假设我可以为NSTableCellView创建另一个xib,并使用
将其连接到父NSTableView
NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MyCellContainingAnNSTableView" bundle:nil];
[parentTable registerNib:cellNib forIdentifier:@"SomeIdentifier"];
但这有点烦人......
答案 0 :(得分:7)
好的,似乎没有人有任何解决方案......
经过很长一段时间的研究,似乎Interface Builder无法归档嵌套的NSTableViews。我的解决方案是创建一个包含.xib
的新NSTableCellView
,并引用原始NSTableView
中的.xib
。这是如何做到的:
SchemeCell.xib
中创建新的NSTableCellView。称之为NSTableViewDelegate
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"SchemeCell" bundle:nil];
[self.schemeTableView registerNib:cellNib forIdentifier:@"SchemeCell"];
});
return [self.schemeTableView makeViewWithIdentifier:@"SchemeCell" owner:self];
}
,并将其设置为主(父)tableview的委托。添加方法:
SchemeCell
远离你!现在主要的缺点是你不能再使用Interface Builder将项目从NSTableView
连接到父.xibs
(因为它们现在都在单独的{{1}}中,但它是不是世界末日,因为你可以在代码中完成所有这些。