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

Val*_*adu 6 cocoa-touch interface-builder ios

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

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

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

wxa*_*tly 2

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

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

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

NSArray *cells = [[nib instantiateWithOwner:self options:nil] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
cell = cells[0];
Run Code Online (Sandbox Code Playgroud)