8

Ok, inizialmente ho voluto fare NSSortDescriptor di una richiesta di NSFetchedResultsController per ordinare in base alla proprietà nel mio NSManagedObject sottoclasse, ma ovviamente non lo farà, perché NSFetchedResultsController è limitato a predicati e ordinamento descrittori che funzionano sull'entità recuperata e le sue relazioni, così ho deciso di creare un attributo transitorio nel mio modello di dati, sintetizzare la proprietà per questo attributo su ivar nella mia sottoclasse NSManagedObject e ordinare in base ad essa.NSSortDescriptor su attributo transitoria per NSFetchedResultsController

Durante l'esecuzione di esso, ho avuto durante l'esecuzione di prelevo 'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>'

So che questo è un problema KVO, così ho aggiunto + (NSSet*)keyPathsForValuesAffectingIsActive, ma hanno ancora lo stesso problema.

Cosa ho fatto di sbagliato o mi manca ancora qualcosa per trovare il mio keypath? Grazie.

codice:

@implementation SMSourceEntity 

@dynamic friendlyName; 
@dynamic interfaceAddress; 
@dynamic uniqueID; 
@dynamic network; 
@synthesize isActive = _isActive; 

+ (NSSet*)keyPathsForValuesAffectingIsActive 
{ 
    return [NSSet setWithObject:@"isActive"]; 
} 

@end 

mia sortDescriptor:

request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil]; 

risposta

16

Non è un problema di KVO, si tratta di un problema con quello che stai cercando di fare, perché la FRC richiede che il genere può essere applicato all'archivio SQLite sottostante. In altre parole, puoi solo filtrare e ordinare gli attributi non transitori. Sarà necessario rendere l'attributo non transitorio in modo che il suo valore venga salvato nell'archivio e disponibile per SQLite.

Per il FRC, solo l'attributo del percorso chiave del nome di sezione può essere transitorio.

+0

Grazie, quindi Se mai vorrei che le proprietà transitori funzionassero con il mio FRC, dovrei creare una sottoclasse, ottenere risultati recuperati, quindi ordinare l'array di oggetti recuperati in base alla mia proprietà in didChangeContent :? Ha senso? – ambientlight

+1

Penso che sarebbe molto difficile da fare, perché dovresti scrivere molto codice o buttare via la maggior parte dei benefici dell'uso di un FRC (come il caricamento su richiesta impaginato). Probabilmente dovresti considerare altre opzioni caso per caso. Come usare più FRC per sezioni diverse o qualcosa del genere. – Wain

+0

Ha perfettamente senso, grazie. – ambientlight

Problemi correlati