Основные данные: сортировка по количеству в отношении ко многим - PullRequest
11 голосов
/ 10 октября 2010

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

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

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

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] 
initWithKey:@"children.@count" ascending:YES];

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

[fetchRequest setSortDescriptors:sortDescriptors];

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

Есть идеи, что может пойти не так?

Ответы [ 3 ]

3 голосов
/ 28 ноября 2012

Насколько я знаю, вы не можете применить @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:@"children.@count" ascending:NO];
NSArray *descriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSArray *sortedArray  = [results sortedArrayUsingDescriptors:descriptors];
1 голос
/ 21 марта 2013

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

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

РЕДАКТИРОВАТЬ: Это исправление работает только на iOS 6.1, но не на iOS 6.0.

0 голосов
/ 18 августа 2011

В итоге я добавил свойство 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]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...