用于核心数据一对多关系的 NSSortDescriptor
Posted
技术标签:
【中文标题】用于核心数据一对多关系的 NSSortDescriptor【英文标题】:NSSortDescriptor for coredata one-to-many relationsip 【发布时间】:2015-09-02 14:24:53 【问题描述】:我只想知道如何将NSSortDescriptor
设置为NSFetchRequest
。
我们不能在CoreData
中按比较器进行排序吗?
还有其他解决方法吗? 有什么建议可以改变我的模型以促进这一点?
顺便说一句,我不会事先知道我将添加什么类型的记录值,我将在所有可能的组合中拥有可变数量的记录值。
我有如图所示的核心数据模型,数据存储如下
(当我想按dateValue排序时,只考虑DOB的dataValue排序)
id stringValue<NSString> dateValue<NSDate> record
name Alex - record1<ZCMORecord>
DOB - 10/10/1990 record1<ZCMORecord>
name Anto - record2<ZCMORecord>
DOB - 05/05/1990 record2<ZCMORecord>
name Max - record3<ZCMORecord>
DOB - 10/10/1990 record3<ZCMORecord>
name Mary - record4<ZCMORecord>
DOB - 01/01/1990 record4<ZCMORecord>
【问题讨论】:
【参考方案1】:这是您对NSFetchedResultsController
进行排序的方式:
- (NSFetchedResultsController *)fetchedResultsController
if (_fetchedResultsController != nil)
return _fetchedResultsController;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"ZCMORecordValue" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortStringValue = [[NSSortDescriptor alloc]
initWithKey:@"stringValue" ascending:YES];
NSSortDescriptor *sortDate = [[NSSortDescriptor alloc]
initWithKey:@"dateValue" ascending:YES];
[fetchRequest setSortDescriptors:@[sortStringValue, sortDate]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
这将首先按名称排序,然后按日期排序。如果要先按日期排序,然后按名称排序,请反转排序描述符的顺序。
【讨论】:
感谢@SpaceDog 的回答。让我试试这个然后回来 这行不通 :(.. 假设我有一个 id 'addedTime' 以及 name 和 DOB。adddedTime 将是一个 NSDate。所以当我排序时,它也会被考虑在内。这会出错。我想要的是,我想将 Id 指定为 DOB,然后排序。:( 我什至愿意更改模型。 什么是出生日期?你想用什么参数进行排序?以上是关于用于核心数据一对多关系的 NSSortDescriptor的主要内容,如果未能解决你的问题,请参考以下文章