是否记录了数组`instantiateWithOwner`返回的任何地方以特定方式排序?

时间:2013-01-06 22:21:27

标签: ios cocoa-touch interface-builder

我最近看到一些使用instantiateWithOwnerUITableView方式加载单元格的代码示例:

cell = [nib instantiateWithOwner:self options:nil][0];

虽然它比将属性出口作为原型单元更清晰,更紧凑,我想知道是否保证(也记录在案)接口构建器中的第一个顶级对象将始终是{{返回的数组中的第一个1}}。此时可能就是这种情况,但如果没有记录(未定义),它可能会在将来发生变化,从而导致具有多个顶级对象的nib会出现问题,并像这样实例化单元格。

1 个答案:

答案 0 :(得分:2)

我找不到任何记录instantiateWithOwner特定返回的数组顺序的地方,但文档 谈论the order that nib-loading code calls awakeFromNib

  

无法保证nib加载代码调用对象的awakeFromNib方法的顺序。

我的假设是,这意味着instantiateWithOwner返回的数组的顺序也不能得到保证。要从xib中提取多个对象时保证顺序,我通常首先通过接口构建器使用唯一(升序)编号配置每个对象的标记。然后,您的代码看起来像这样:

NSArray *cells = [[nib instantiateWithOwner:self options:nil] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
cell = cells[0];