到目前为止,我使用KVC
来访问对象的属性。
在我的对象中,我有一个这样的方法:
-(Address *)mainAddress {
if (self.addresses != nil) {
return [self.addresses anyObject]; //stub method
}
else {
return nil;
}
}
我可以将此方法与KVC
一起使用
mystring = [cliente valueForKeyPath:@"mainAddress.city"];
但我不能用来创建NSFetchRequestController
(此代码使用MagicalRecord)
NSFetchedResultsController *acontroller = [Customer fetchAllSortedBy:@"mainAddress.city" ascending:ascending withPredicate:companyPredicate groupBy:nil delegate:self];
这是错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath mainAddress.city not found in entity <NSSQLEntity Customer id=4>'
答案 0 :(得分:1)
为了使用NSFetchedResultsController进行排序,您的mainAddress keyPath必须是您实体的属性。 NSFRC将在内存中不使用KVC对数据进行排序,而是使用底层数据存储。底线答案:使mainAddress成为数据模型中实体的字段。