加载的NSNib按顺序排列顶级对象

Eim*_*tas 4 cocoa nstableview nib

这是我用于使用数据填充基于视图的NSTableView的一段代码:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    MyCustomCellView *view = (MyCustomCellView *)[tableView makeViewWithIdentifier:@"MyCustomCellView" owner:self];
    if (!view) {
        NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MyCustomCellView" bundle:[NSBundle mainBundle]];
        NSArray *array = nil;
        if ([cellNib instantiateNibWithOwner:self topLevelObjects:&array]) {
            DLog(@"%@", array);
            view = [array objectAtIndex:0];
            [view setIdentifier:@"MyCustomCellView"];
        }
        [cellNib release];
    }

    MyObject *object = [_objects objectAtIndex:row];

    [[view titleTextField] setStringValue:object.title];

    return view;
}
Run Code Online (Sandbox Code Playgroud)

DLog语句为两个连续的委托调用打印如下数组:

(
    "<MyCustomCellView: 0x7fb2abe81f70>",
    "<NSApplication: 0x7fb2ab80cbf0>"
)
(
    "<NSApplication: 0x7fb2ab80cbf0>",
    "<MyCustomCellView: 0x7fb2abb2c760>"
)
Run Code Online (Sandbox Code Playgroud)

这仅仅是两行输出了几百个,所以我随机要么得到正确显示我的观点还是我得到unrecognized selector错误,同时呼吁setIdentifier:view对象时viewobjectAtIndex:0实际上是一个实例NSApplication从加载笔尖的顶层对象.

这是nib加载机制中的错误还是我在使用此代码时出错?

Sam*_*ett 5

这个帖子有点旧,但它的价值是多少:

目前尚不清楚这是否是一个错误,因为文档并不具体关于在topLevelObjects:参数中传回的数组的顺序.但是,这段代码对我有用.

NSArray *arrayOfViews;
BOOL wasLoaded = [[NSBundle mainBundle] loadNibNamed:xibName owner:self topLevelObjects:&arrayOfViews];
NSUInteger viewIndex = [arrayOfViews indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
  return [obj isKindOfClass:[MyCustomView class]];
}];

self = [arrayOfViews objectAtIndex:viewIndex];
Run Code Online (Sandbox Code Playgroud)