6

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

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

虽然它比将属性出口作为原型单元更清洁、更紧凑,但我想知道是否可以保证(也记录在案)接口构建器中的第一个顶级对象将始终是instantiateWithOwner. 在这一点上可能是这种情况,但如果没有记录(未定义),它可能会在未来发生变化,从而给具有多个顶级对象并像这样实例化单元格的 nib 带来麻烦。

4

1 回答 1

2

我找不到任何记录返回的数组顺序的地方instantiateWithOwner,但文档确实谈到了 nib 加载代码调用 awakeFromNib 的顺序

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

我的假设是,这意味着返回的数组的顺序instantiateWithOwner也不能保证。为了保证从 xib 中拉出多个对象时的顺序,我通常首先通过接口构建器为每个对象的标签配置一个唯一(升序)编号。然后,您的代码将如下所示:

NSArray *cells = [[nib instantiateWithOwner:self options:nil] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
cell = cells[0];
于 2013-01-08T17:34:11.457 回答