我最近看过一些使用instantiateWithOwner通过以下方式为UITableView加载单元格的代码示例:
cell = [nib instantiateWithOwner:self options:nil][0];
尽管它比将属性导出作为原型(prototype)单元更干净,更紧凑,但我想知道是否可以保证(也有文件证明)接口(interface)生成器中的第一个顶级对象将始终是instantiateWithOwner返回的数组中的第一个对象。此时可能是这种情况,但如果未记录(未定义),则将来可能会发生变化,这将给具有多个顶级对象并实例化像这样的单元格的 Nib 带来麻烦。

最佳答案

我找不到任何地方专门记录instantiateWithOwner返回的数组的顺序,但是该文档确实谈到了the order that nib-loading code calls awakeFromNib:



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

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

10-05 21:00