2013-01-12 27 views
2

我使用KVC直到现在才能访问对象的属性。使用KVC的MagicalRecord排序

在我的对象,我有这样的方法:

-(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

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

+0

我会尝试,但我不喜欢在数据库中添加重复。 – IgnazioC

+0

这不是一个重复的问题,而是要弄清楚为什么你的搜索会崩溃。你宁愿有什么,重复的数据或崩溃的应用程序? – casademora

+0

我改变了一个简单的属性的方法,现在NSFRC完美的作品,甚至MagicalRecord ...但我需要改变我的模型。 – IgnazioC