MagicalRecord使用KVC进行排序

时间:2013-01-12 16:22:45

标签: nssortdescriptor magicalrecord kvc

到目前为止,我使用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>'

1 个答案:

答案 0 :(得分:1)

为了使用NSFetchedResultsController进行排序,您的mainAddress keyPath必须是您实体的属性。 NSFRC将在内存中不使用KVC对数据进行排序,而是使用底层数据存储。底线答案:使mainAddress成为数据模型中实体的字段。