KVC使用MagicalRecord排序

Posted

技术标签:

【中文标题】KVC使用MagicalRecord排序【英文标题】:MagicalRecord sorting using by KVC 【发布时间】:2013-01-12 16:22:45 【问题描述】:

到目前为止,我一直使用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】:

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

【讨论】:

我会尝试,但我不喜欢在 db 中添加重复。 这不是重复的问题,而是找出您的搜索崩溃的原因。您更喜欢哪一个,重复数据还是崩溃的应用程序? 我用一个简单的属性改变了方法,现在 NSFRC 可以完美运行,甚至是 MagicalRecord...但是我需要改变我的模型。

以上是关于KVC使用MagicalRecord排序的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 Magical Record 与 Kiwi 一起使用时构建测试时出错

使用 Magical Record 在 NSDictionary 中导入数组

AFNetworking 的 Magical Record 导入问题

Magical Record - 丢失我的实体信息

如何在objective-c中使用可可豆荚升级magic record sdk

使用 Magical Record 添加到创建的实体属性