我最近看到一些使用instantiateWithOwner
以UITableView
方式加载单元格的代码示例:
cell = [nib instantiateWithOwner:self options:nil][0];
虽然它比将属性出口作为原型单元更清晰,更紧凑,我想知道是否保证(也记录在案)接口构建器中的第一个顶级对象将始终是{{返回的数组中的第一个1}}。此时可能就是这种情况,但如果没有记录(未定义),它可能会在将来发生变化,从而导致具有多个顶级对象的nib会出现问题,并像这样实例化单元格。
答案 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];