Сортировать NSSet пользовательских объектов по одному атрибуту в Objective-C - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь отсортировать массив по наиболее распространенному значению свойства или атрибута. Этот вопрос и другие предполагают, что вы можете сделать это эффективно с помощью NSSet.Однако это просто сортировка по наиболее распространенной строке, а не по значениям свойства в пользовательских объектах.Как получить следующее, чтобы вернуть самый популярный заголовок?

NSArray<Articles*> *results = [self.managedObjectContext executeFetchRequest:fetchRequest
                                                                error:&error];

    NSCountedSet* mySet = [[NSCountedSet alloc] initWithArray:results];
    Articles* mostRead = nil;
    NSUInteger highestCount = 0;

                for(Articles* article in results) {
                    NSUInteger count = [mySet countForObject:article.title];
                    if(count > highestCount) {
                        highestCount = count;
                        mostRead = article;
                    }
                }

Приведенный выше код не возвращает значение, так как countForObject: article.title, похоже, не распознается.

1 Ответ

0 голосов
/ 02 марта 2019

Ваш mySet, если установлено Articles *.Тогда вы рассчитываете на article. title, что NSString *.Попробуйте изменить набор NSString * должно работать.

 NSMutableArray<NSString *> *resultsStr = [NSMutableArray new];
 [results enumerateObjectsUsingBlock:^(Articles * _Nonnull obj,
                                      NSUInteger idx,
                                      BOOL * _Nonnull stop) {
    [resultsStr addObject:obj.title];
 }];
 NSCountedSet* mySet = [[NSCountedSet alloc] initWithArray:resultsStr];
...