2012-02-20 11 views
6

Sto creando un UITableView con alcuni dati aggregati. Lungo il percorso, le intestazioni di sezione devono essere utilizzate nell'ordinamento e nel raggruppamento delle celle di visualizzazione tabella.Dati principali: utilizzo di Proprietà transitori nel gruppo

Il problema è Vorrei utilizzare una proprietà temporanea all'interno di NSFetchRequest per generare intestazioni delle sezioni & ordinamenti dei risultati. Il problema è che durante l'impostazione di NSFetchRequest, ricevo un '' NSInvalidArgumentException ', motivo:' keypath player.fullName non valido passato a setPropertiesToFetch '.

L'entità principale per NSFetchRequest è un'entità Player con proprietà: firstName & lastName. Per ordinare e raggruppare i dati è stata introdotta una proprietà temporanea 'fullName'. Questa è una semplice concatenazione delle proprietà lastName e firstName.

Cose provato finora sono:

a) Definizione del - (NSString *) fullName metodo

b) Definizione di una @property (nonatomic, sola lettura) NSString * fullName

c) Aggiunta a @dynamic fullName

d) Aggiunta dell'attributo fullName all'entità Player & che lo rende transitorio.

Ci sono idee o esiste ora per selezionare proprietà transitori in una NSFetchRequest che include una clausola group by.

Qualsiasi aiuto apprezzato.

risposta

2

Non è possibile includere proprietà transitori nella richiesta di recupero, ma è possibile utilizzare per il percorso chiave del nome della sezione, purché vengano visualizzate nello stesso ordine.

Provare a ordinare la richiesta di recupero su lastName e firstName (due descrittori di ordinamento separati, in un array), quindi utilizzare player.fullName come percorso chiave del nome della sezione durante la creazione del controller dei risultati recuperati (solo aeb dall'elenco in alto).

+0

Grande suggerimento. Provato e ottenuto sempre così vicino. Ancora ricevendo un'eccezione KVO per fullName, ma credo che questo sia dovuto al fatto che io utilizzo un NSDictionaryResultType non un risultato di entità standard. Ma sicuramente mi ha dato una nuova strada da seguire. – user1220717

3

Bene, alla fine, sembra che includere una proprietà temporanea in un gruppo da NSFetchResults con Group By non sia possibile.

Il grande suggerimento di jrturton si è avvicinato. Alla fine, la proprietà transitoria fullName era abbastanza facile da generare all'aggiornamento all'entità e solo aggiornata molto raramente, quindi la soluzione era smettere di usare una proprietà transitoria e creare un attributo completo. Pensala come una denormalizzazione estrema.

la soluzione era quella di impostare le seguenti

-(void)setLastName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"lastName" ]; 
    [self setPrimitiveValue: aName forKey: @"lastName" ]; 
    [self updateFullName]; 
    [self didChangeValueForKey: @"lastName" ]; 
} 

-(void)setFirstName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"firstName" ]; 
    [self setPrimitiveValue: aName forKey: @"firstName"];  
    [self updateFullName]; 
    [self didChangeValueForKey: @"firstName" ]; 
} 

Questo aggiorna il fullName come una proprietà dell'entità Player e rimosso i miei problemi. Spero che sia d'aiuto.

+0

Non stai scrivendo correttamente i tuoi oggetti di accesso agli oggetti gestiti: consulta https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html - devi pubblicare le notifiche KVO. – jrturton

+0

Hai ragione. Li ho aggiornati sopra. Penso di essere stato troppo ansioso dopo aver lavorato intorno al mio problema. – user1220717

Problemi correlati