Основные данные: сортировка по счету во многих отношениях

В настоящее время я пытаюсь настроить NSFetchedResultsController, который будет заказывать мое табличное представление на основе количества объектов во многих отношениях. Я не уверен, что это имеет значение при подсчете, но это также обратная связь.

Я подумал, что что-то вроде этого будет прекрасно работать:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Parent"
inManagedObjectContext:managedObjectContext];

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] 
initWithKey:@"[email protected]" ascending:YES];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,
nil];

[fetchRequest setSortDescriptors:sortDescriptors];

Я продолжаю получать "Keypath, содержащий агрегат KVC, где его не должно быть; не удалось обработать детей. @count '.

Любые идеи о том, что может пойти не так?

Ответ 1

Насколько я знаю, вы не можете применить @count в запросе, но можете легко применить его к извлеченному массиву.

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:self.managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
NSError *error;
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];

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

Ответ 2

Я добавил атрибут KVO -countOf<Key> как атрибут моей модели управляемых объектов как целочисленный тип. Я не реализовал ничего для этого атрибута в моем подклассе NSManagedObject, поскольку все волшебство, кажется, происходит под капотом.

Итак, в этом конкретном случае добавьте атрибут countOfChildren в объект Parent. Это должно удалить исключение.

EDIT: Это исправление работает только на iOS 6.1, а не на iOS 6.0.

Ответ 3

i закончил добавление свойства count в мою сущность, я просто увеличил его всякий раз, когда добавлялось новое отношение. упростил использование fetchedResultsController.

Будьте заинтересованы, если вы нашли способ использования KVC. Мне никогда не нужно было исправлять этот хак.

что-то вроде этого может быть полезно:

entity *match;    
match = (entity *)[objects objectAtIndex:0];
        NSSet *t = [match valueForKey:@"entity"]; 
        if(![t containsObject:newEntity]){
            int newCount = [match.count intValue] +1;
        [match addEntityObject:newEntity];
            [match setCount:[NSNumber numberWithInt:newCount]];