6

私は最近instantiateWithOwner、この方法でセルをロードするために使用されるコードサンプルを見ましたUITableView:

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

プロパティアウトレットをプロトタイプセルとして持つよりもクリーンでコンパクトですが、インターフェイスビルダーの最初のトップレベルオブジェクトが常にによって返される配列の最初になることが保証されている(別名文書化されている)かどうか疑問に思いますinstantiateWithOwner。現時点ではそうかもしれませんが、文書化されていない (未定義) 場合は、将来変更される可能性があり、複数のトップ レベル オブジェクトを持ち、このようにセルをインスタンス化する nib で問題が発生する可能性があります。

4

1 に答える 1

2

instantiateWithOwner具体的に返される配列の順序を文書化している場所はどこにもありませんが、文書にはnib-loading コードが awakeFromNib を呼び出す順序について記載されています。

nib-loading コードがawakeFromNibオブジェクトのメソッドを呼び出す順序は保証されていません。

これは、返される配列の順序instantiateWithOwnerも保証されていないことを意味すると思います。xib から複数のオブジェクトを引き出す際の順序を保証するために、通常はインターフェイス ビルダーを介して各オブジェクトのタグを一意の (昇順の) 番号で構成することから始めます。次に、コードは次のようになります。

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