8

Ok, ja początkowo chciał, aby NSSortDescriptor wniosku o NSFetchedResultsController sortowania w oparciu o właściwości w moim NSManagedObject podklasy, ale to oczywiście nie zrobi, bo NSFetchedResultsController jest ograniczona do orzeczników i sortowania deskryptory działające na pobranej jednostce i jej relacje, dlatego postanowiłem utworzyć atrybut przejściowy w moim modelu danych, przetworzyć właściwość tego atrybutu na Ivar w mojej podklasie NSManagedObject i na tej podstawie sortować.NSSortDescriptor na przejściową atrybutu dla NSFetchedResultsController

Po uruchomieniu go, mam podczas wykonywania sprowadzić 'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>'

wiem, że to KVO problem, więc dodałem + (NSSet*)keyPathsForValuesAffectingIsActive, ale nadal mają ten sam problem.

Co zrobiłem źle, lub nadal brakuje mi czegoś, co sprawiło, że znalazłem mój keypath? Dzięki.

Kod:

@implementation SMSourceEntity 

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

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

@end 

mój sortDescriptor:

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

Odpowiedz

16

To nie jest KVO problem, to problem z tym, co próbujesz zrobić, ponieważ wymaga FRC, że porządek może zastosować do bazowego magazynu SQLite. Innymi słowy, możesz filtrować i sortować tylko na nieprzechodnie atrybutach. Musisz uczynić atrybut nietransientowy, aby jego wartość została zapisana w magazynie i dostępna dla SQLite.

Dla FRC tylko atrybut nazwy ścieżki sekcji może być przejściowy.

+0

Dzięki, więc jeśli kiedykolwiek chciałbym, aby właściwości przejściowe działały z moim FRC, musiałbym je podklasować, pobrać otrzymane wyniki, a następnie posortować tablicę pobranego obiektu na podstawie mojej właściwości w didChangeContent :? Czy jest sens? – ambientlight

+1

Myślę, że byłoby to bardzo trudne, ponieważ musiałbyś napisać dużo kodu lub wyrzucić większość korzyści z używania FRC (jak paginowane ładowanie na żądanie). Powinieneś prawdopodobnie rozważyć inne opcje na podstawie każdego przypadku. Podobnie jak przy użyciu wielu FRC dla różnych sekcji lub czegoś podobnego. – Wain

+0

Idealnie ma sens, dzięki. – ambientlight