在实体</transientproperty>中找不到Keypath <transientproperty>

时间:2013-04-12 12:57:57

标签: ios objective-c core-data nssortdescriptor

我想在表格视图的节标题中显示格式化的日期..

我使用了以下代码。但它抛出异常*** 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;

}

2 个答案:

答案 0 :(得分:29)

您的问题标题表明“dateSectionIdentifier”是瞬态属性。

如果将SQLite用作存储类型,则不能在Core Data获取请求的排序描述符(或谓词)中使用transient属性。这是一个记录在案的限制,只能使用持久属性。

请参阅“核心数据编程指南”中的Persistent Store Types and Behaviors 了解更多信息。

答案 1 :(得分:0)

我认为你会在子类中添加“dateSectionIdentifier”,但不会在.xcdatamodelId文件中更新。 交叉检查是否在.xcdatamodelId文件中添加了“dateSectionIdentifier”。