2010-03-15 2 views
6

Скажем, у меня есть родительское сущность, у каждого из которых есть несколько детей. Я хочу, чтобы все родители были отсортированы по количеству детей. Нечто подобное следующему псевдокода:Основные данные: сортировка по NSFetchRequest по количеству совпадений

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

[[NSSortDescriptor alloc] initWithKey:@"children.count" ascending:NO]; 
//Execute request 

Есть ли способ построить выборку, как это с использованием основных данных? Если нет способа сделать это, сортировка будет с использованием sortedArrayUsingSelector: потерять преимущества размера партии _PFBatchFaultingArray?

Спасибо, Бен

ответ

5

Ваш запрос будет работать, но (при условии, children неисправен) будет использовать ключ-значение методов кодирования на children собственности, которая, в свою очередь поджечь неисправность (см the NSManagedObject docs для списка методы, которые срабатывают в случае сбоев, и обсуждение этого поведения), поэтому вы потеряете преимущества производительности при сбое и сбоях.

Возможно, вы захотите сохранить производный атрибут вашего родительского объекта (назовите его childrenCount), который отражает количество детей, связанных с родителем, если это возможно для вашей ситуации. Это не самое чистое решение, но если вы сохраните его как NSNumber в родительском объекте, у вас будет доступ к нему, даже если ошибка children, и вы можете отсортировать его напрямую.

+1

KVC '@ count' будет выполняться на' NSSet', а не на объектах этого 'NSSet' и, следовательно, не вызывает сбоев. –

+0

Это приводит к сбою в работе, так как Core Data не повреждает каждый объект по отдельности - он сам отказывает сам набор (или, скорее, конкретный подкласс NSSet). См. Http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html#//apple_ref/doc/uid/TP30001202, в разделе «Faulting Limits the Size of Object Graph» , – Tim

+3

С тех пор все изменилось? iOS 7 исключает исключение для этого типа сортировки: *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: ключ «to-many» не разрешен здесь » *** Первый стек вызовов броска: – an0

Смежные вопросы