Domanda

Nella visualizzazione della mia raccolta devo generare un indice per ciascun elemento.Man mano che gli elementi vengono riordinati, ho bisogno che questo indice venga aggiornato con la sua nuova posizione.

I dati sono entità Core Data in un NSArrayController gestito.La soluzione più vicina a cui sono arrivato è l'implementazione di questo metodo sulla classe di entità e quindi l'utilizzo oggetto rappresentato.indicedinamico per associarlo all'interfaccia utente.

- (NSNumber *) dynamicIndex
{
    NSInteger r = [[[[self managedObjectContext] registeredObjects] allObjects] indexOfObject:self];
    NSNumber *result = [NSNumber numberWithInt:r];
    return result;
}

Questa soluzione è, nella migliore delle ipotesi, approssimativa e non realmente funzionale in quanto non riflette necessariamente l'ordine nella visualizzazione della raccolta.

Qualcuno ha un modello/meccanismo per generare o recuperare gli indici degli elementi in un NSCollectionView?

È stato utile?

Soluzione

Innanzitutto, assicurati di comprendere la differenza tra (e usa correttamente la terminologia "entità" e "istanza". Fa la differenza nel comunicare i tuoi problemi/soluzioni con gli altri.

Secondo:Non preoccuparti di NSCcollectionViewItems...preoccuparsi dell'"oggetto rappresentato" di ciascuno, che è conservato in qualche contenitore.

Terzo:Volevi che l'ordine di visualizzazione fosse un attributo persistente della tua entità o ti basta sapere in quale posizione si trova l'elemento in questo momento, indipendentemente da cosa potrebbe essere in seguito?Domanda importante.

Il quarto:Core Data non ti fornisce il concetto di raccolte ordinate.Questo serve a supportare tipi di negozio come NSSQLiteStoreType, in cui potresti voler inserire in errore solo alcuni elementi (o uno) senza caricare l'intero elenco.Pertanto, sei da solo se desideri un ordinamento persistente.Per fare ciò, aggiungi semplicemente un attributo alla tua entità chiamato "sortOrder" e rendilo un tipo numerico.

Quinto:A causa del problema "nessuna raccolta ordinata" di cui sopra, il tuo tentativo di trovare l'indice di una determinata istanza della tua entità da un array, costruito da un set, che è stato violato con un ordine non deterministico è destinato al fallimento.

Sesto:Poiché stai utilizzando un controller di array, dovrai impostarne i descrittori di ordinamento.Ti consigliamo di utilizzare la chiave "sortOrder".In questo modo, le istanze recuperate verranno sempre ordinate in base al loro "sortOrder".

Settimo ed ultimo:Se stai cercando di ottenere l'indice di qualsiasi oggetto nel tuo file controller di array set/array di oggetti, ti consigliamo di chiedergli i suoi -arrangedObjects, in modo da ottenere l'indice dell'oggetto nel smistato raccolta controllata dal controller di array.

Spero che aiuti.

Aggiornamento per Lion (10.7)

Per quanto riguarda il mio sesto punto:Se hai come target la versione 10.7 e versioni successive nella tua applicazione, [NSManagedObject ora ti fornisce relazioni ordinate.] [1] Utilizza -mutableOrderedSetValueForKey:e -mutableOrderedSetValueForKey:per impostare e recuperare NSOrdedSets.Sìì!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top