代码之家  ›  专栏  ›  技术社区  ›  Joonas Trussmann

nssortdescriptor和多个关系

  •  8
  • Joonas Trussmann  · 技术社区  · 15 年前

    我有两种反对意见:地点和历史记录。 我正在尝试提取附加到任何历史记录项的位置,因此我对该位置的提取谓词是“history@count>0”,它工作正常。

    我还想用nssortdescriptor按最新历史记录项的日期对location对象进行排序,据我所知,这将是“history@max.time”,但会引发以下错误:

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
        reason: 'Keypath containing KVC aggregate where there shouldn't be one;
        failed to handle history.@max.time'
    

    HALP PLOX?

    3 回复  |  直到 13 年前
        1
  •  4
  •   ma11hew28    13 年前

    阿飞,你只能用 collection operators ,在 Key-Value Coding Programming Guide ,用于排序描述符的密钥路径 collections ( NSArray , NSSet , NSDictionary )

    不能对带有FETCH请求的排序描述符的密钥路径使用集合运算符( NSFetchRequest )

    @kdbdallas正确地使用集合运算符对 不可变数组 . 他没有使用它来指定提取请求的排序描述符。

    不过,如果集合运算符用于指定用于对提取请求进行排序的密钥路径,那就太好了。请在提交此功能请求 http://bugreport.apple.com/ . 报道越多,他们越有可能支持。

        2
  •  1
  •   itsaboutcode    13 年前

    可能不是最好的解决方案,但您可以随时收回数据并在事后对其进行排序。看一看 Sorting and Filtering NSArray Objects .

        3
  •  0
  •   kdbdallas    15 年前

    下面是一些代码,我在这里也有类似的代码

    NSError *error;
    
    if (![[self fetchedResultsController] performFetch:&error])
    {
        UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
        [alert show];
    }
    else
    {
        self.feedsArray = [fetchedResultsController fetchedObjects];
    
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"articles.@max.postDate" ascending:NO];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    
        self.feedsArray = [feedsArray sortedArrayUsingDescriptors:sortDescriptors];
    
        [sortDescriptors release];
        [sortDescriptor release];
    
        NSInteger overviewAmount = [[feedsArray valueForKeyPath:@"@sum.unreadArticles"] integerValue];
    
        ....
    }