2

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>'
4

1 回答 1

1

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

于 2013-01-13T00:40:31.170 回答