iPhone:无法对多对关系进行 NSSortDescriptor。如何排序?

Posted

技术标签:

【中文标题】iPhone:无法对多对关系进行 NSSortDescriptor。如何排序?【英文标题】:iPhone: Unable to NSSortDescriptor on to-many relationship. How to sort? 【发布时间】:2012-11-19 20:32:16 【问题描述】:

我正在使用通过 NSSortDescriptor 排序的 NSFetchRequest。

这对于获取的实体的所有属性都非常有效。

在该实体中只有一个问题(不是一直存在吗?)我与另一个实体有关系,我也想对这个问题进行排序。但它给了我以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

这是我的核心数据设置:

这是我的代码:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entityMonth = [NSEntityDescription entityForName:@"Month" inManagedObjectContext:_managedObjectContext];
    [fetchRequest setEntity:entityMonth];

    NSSortDescriptor *sortDescriptorItem = [NSSortDescriptor sortDescriptorWithKey:@"item.nr" ascending:YES]; //THIS ONE CAUSES THE ERROR!
    NSSortDescriptor *sortDescriptorMonth = [[NSSortDescriptor alloc]initWithKey:@"month" ascending:YES];
    NSSortDescriptor *sortDescriptorYear = [[NSSortDescriptor alloc]initWithKey:@"year" ascending:YES];


    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptorYear, sortDescriptorMonth, sortDescriptorItem, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    self.stages = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];

【问题讨论】:

【参考方案1】:

您无法对item.nr 进行排序,因为Month 对象与许多Item 对象相关,因此每个Month 对象都有多个item.nr 值。

【讨论】:

如果我想根据 nr 属性对所有项目进行排序,我应该如何处理呢? @iJar:您的 fetch 请求返回 Month 对象,而不是 Item 对象,因此我还不明白您到底想要什么。 此数据显示在表格视图中。 month.name 显示为部分标题,项目是每个部分下的行。 month.year 和month.month 对部分进行排序。现在我正在寻找一种基于 item.id 对行进行排序的方法。希望这能澄清我的意图。 @iJar:你使用获取结果控制器吗? 不,我现在不在。这能帮上忙吗?

以上是关于iPhone:无法对多对关系进行 NSSortDescriptor。如何排序?的主要内容,如果未能解决你的问题,请参考以下文章

使用多对多关系进行内部连接类似搜索

EF更新多对多关系表中记录的时候,无法更新关系表的问题。

多对多 - “无法确定一对一关系的子/依赖方”

Laravel:无法添加记录多对多关系

Laravel:无法在视图中显示多对多关系

Cocoa,使用集合运算符和多对多关系属性进行绑定