Основные данные: сортировка по счету во многих отношениях
В настоящее время я пытаюсь настроить 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]];