NSSortDescriptor和多对多关系

时间:2011-10-04 01:29:39

标签: objective-c core-data nsfetchedresultscontroller

我正在使用NSFetchedResultsController在UITableView中显示数据。我有很多关系,看起来像这样:

Article ---->> Tag

一篇文章有​​很多标签。

我想订购它们,以便所有标题为“Banana”的标签都出现在标有“Orange”的标签之前,而标签“Orange”又标记为“Apple”等。标题是一个属性标签

我正在考虑使用NSSortDescriptor。我在Tag NSManagedObject子类中实现了一个名为“position”的方法。此方法返回一个描述标记顺序的NSInteger。

问题是NSSortDescriptor不支持多对多关系。 (控制台上写着:“这里不允许使用多对键”。)这是我尝试的内容:

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"tags.tagText" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {

    if ([obj1 position] > [obj2 position]) { 
         return (NSComparisonResult)NSOrderedDescending;
        }
    if ([obj1 position] < [obj2 position]) {
        return (NSComparisonResult)NSOrderedAscending;
         }
    return (NSComparisonResult)NSOrderedSame;
}]; 

知道答案是什么吗?如何根据通过多对多关系链接的另一个实体的属性的任意值进行排序?

修改

我现在想知道我是否可以在我的Article类中使用一个方法来帮助进行排序。我会做这样的事情:

 - (NSInteger)position{

NSInteger aPosition = 100;

for (Tag *aTag in self.tags) {
    if (position > [aTag position]) {
        aPosition = [aTag position];
    }
}

return aPosition;
}

有没有办法让我的NSSortDescriptor调用这个方法?

1 个答案:

答案 0 :(得分:2)

好的,所以Tag有一个title属性,你想要显示一个包含文章的表格视图,这些文章分为部分,其中该部分是标签中的标题?

假设这是正确的,简短的答案是你做不到的。排序没有意义,因为Article可以并且将在排序中的多个位置。如果一篇文章有​​Apple和Orange标签,那么它应放在哪里?