2013-04-12 18 views
11

chcę pokazać sformatowaną datę w nagłówku sekcji widoku tabeli ..keypath <transientproperty> Nie znaleziono w jednostce

użyłem następujących code.but jego wyrzuceniem wyjątku *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>'.

zgadnij, że wyjątek nadchodzi podczas dodawania deskryptora sortowania.

NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithCapacity:20]; 
NSSortDescriptor *mainSortDescriptor = [[NSSortDescriptor alloc] initWithKey:dateSectionIdentifier ascending:NO]; 
[sortDescriptors addObject:mainSortDescriptor]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

//Expense.h

NSString *dateSectionIdentifier; 

//Expense.m

@dynamic dateSectionIdentifier 

-(NSString *)dateSectionIdentifier{ 
[self willAccessValueForKey:@"dateSectionIdentifier"]; 
NSString *tempDate = [self primitiveDateSectionIdentifier]; 
[self didAccessValueForKey:@"dateSectionIdentifier"]; 
if(!tempDate){ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"d MMMM yyyy"]; 
    tempDate = [dateFormatter stringFromDate:[self date]]; 
    [self setPrimitiveDateSectionIdentifier:tempDate]; 
    [dateFormatter release]; 
} 
return tempDate; 

} 
+1

Pokaż nam deklarację i inicjalizację 'dateSectionIdentifier' – CodaFi

Odpowiedz

28

Tytuł pytanie wskazuje, że "dateSectionIdentifier" to przemijający nieruchomość.

Nie można użyć właściwości przejściowej w deskryptorze sortowania (lub w predykacie) żądania pobrania danych podstawowych, jeśli SQLite jest używany jako typ składowania. Jest to udokumentowane ograniczenie, można używać tylko właściwości trwałych.

Aby uzyskać więcej informacji, zobacz temat Persistent Store Types and Behaviors w "Przewodniku po programowaniu podstawowych danych" .

+0

link jest uszkodzony; ( – Oriol

+0

@Oriol: Dzięki za powiadomienie, zaktualizowałem link. –

0

Myślę, że dodałbyś "dateSectionIdentifier" w podklasie, ale nie zaktualizowano go w pliku .xcdatamodelId. Sprawdź krzyżowo, czy dodano "dateSectionIdentifier" w pliku .xcdatamodelId, czy nie.