首页 > 解决方案 > 排序描述符中的 @count 在 Objective-C 中给出“不符合键值”错误

问题描述

我正在尝试按给定属性的给定值出现的次数对数组进行排序。

为此,我使用以下代码:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title.@count" ascending:NO];
            NSArray *descriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
            NSArray *sortedArray  = [results sortedArrayUsingDescriptors:descriptors];

但是,当代码编译时,在运行时它会给出错误:

'[<__NSCFNumber 0xb00000000004e293> valueForUndefinedKey:]: this class is not key value coding-compliant for the key @count.'

我究竟做错了什么?

编辑:

有问题的数组实际上由核心数据提取的结果组成,如下所示:

  self.managedObjectContext = [Model sharedInstance].managedObjectContext;

    [fetchRequest setPredicate:pred];
  //  fetchRequest.resultType = NSDictionaryResultType;
    NSArray<Articles*> *results = [self.managedObjectContext executeFetchRequest:fetchRequest
                                                                error:&error];
        if ([results count]>=1) {

标签: iosobjective-ccountnssortdescriptor

解决方案


您可以使用+\[NSSortDescriptor sortDescriptorWithKey:ascending:comparator:\]. 这需要一个可以实现您想要的任何算法的块。您可以在排序操作之前创建一个NSCountedSetfrom[results valueForKey:@"title"]并让比较器块捕获它。这样,您就有了一种简单而廉价的方法来获取给定对象标题的计数。问题是如果/当对象更改时(如果可以),如何重新生成该计数集。


推荐阅读