Keypath <transientproperty> не найден в объекте

Я хочу показать отформатированную дату в заголовке раздела представления таблицы.

Я использовал следующий код. но он выбрал исключение *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>'.

Предположим, что при добавлении дескриптора сортировки возникает исключение.

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

Название вашего вопроса указывает, что "dateSectionIdentifier" является временным свойством.

Вы не можете использовать свойство переходного процесса в дескрипторе сортировки (или в предикате) запроса выборки Core Data, если SQLite используется как тип хранилища. Это документированное ограничение, могут использоваться только постоянные свойства.

См. "Сохраняемые типы и поведение хранилища" в "Руководстве по программированию основных данных", для получения дополнительной информации.

Ответ 2

Я думаю, вы добавили бы "dateSectionIdentifier" в подкласс, но не обновлялись в файле .xcdatamodelId. Перекрестная проверка, чтобы увидеть, добавили ли вы "dateSectionIdentifier" в файл .xcdatamodelId или нет.