2013-01-06 13 views
6

Ho ultimamente visto alcuni esempio di codice che utilizza instantiateWithOwner per caricare le cellule per un UITableView in questo modo:È documentato ovunque che l'array `instantiateWithOwner` restituisce è ordinato in un modo specifico?

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

mentre è più pulito e più compatto di avere una presa di proprietà come un prototipo di cella, mi chiedo se è garantito (ovvero documentato) che il primo oggetto di livello superiore nel generatore di interfacce sarà sempre il primo nell'array restituito da instantiateWithOwner. A questo punto potrebbe essere il caso, ma se non è documentato (indefinito), potrebbe cambiare in futuro, causando problemi per i pennini che hanno più di un oggetto di livello superiore e istanziano celle come questa.

+1

Beh, se stai scrivendo questo codice, presumibilmente controlli il '.xib', quindi se stai usando questo stile di codice non hai mai un altro oggetto di livello superiore. –

+0

Ah, hai ragione. Ma la mia domanda va oltre. Tu controlli il pennino e metti il ​​tuo oggetto per primo, tuttavia, potrebbe accadere che 'instantiateWithOwner' non restituisca un array ordinato in un sistema operativo futuro, quindi probabilmente la tua app si bloccherà. Tuttavia, se questo è documentato, Apple sarà sicuro che la cosa rimarrà tale, quindi non romperà le app che seguono i loro documenti dopo tutto. –

+0

['- [Uinib instantiateWithOwner: options:]'] (http://developer.apple.com/library/ios/documentation/uikit/reference/UINib_Ref/Reference/Reference.html#//apple_ref/occ/instm/ Uinib/instantiateWithOwner: options :) restituisce un 'NSArray' che è ordinato per definizione. Apple non poteva cambiarlo senza rompere la compatibilità all'indietro. –

risposta

2

non riesco a trovare da nessuna parte che documenta l'ordine dell'array restituito da instantiateWithOwner specifico, ma la documentazione fa parlare the order that nib-loading code calls awakeFromNib:

L'ordine in cui il codice pennino in carico chiama il awakeFromNib i metodi degli oggetti non sono garantiti.

La mia ipotesi è che questo significa che l'ordine dell'array restituito da instantiateWithOwner non è garantito. Per garantire l'ordine quando si estrae più oggetti da uno xib, di solito inizio configurando il tag di ciascun oggetto tramite il generatore di interfacce con un numero univoco (crescente). Quindi, il tuo codice sarebbe simile a questo:

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