2010-10-10 16 views
10

Actualmente estoy tratando de configurar un NSFetchedResultsController que ordenará mi vista de tabla en función del número de entidades en una relación a-muchos. No estoy seguro de si esto hace una diferencia al contar, pero esta también es una relación inversa.Datos principales: clasificación por conteo en una relación a muchos

pensé que algo como esto funcionaría bien:

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]; 

me siguen dando 'KeyPath contiene KVC agregada donde no debería ser uno; falló al manejar niños. @ count '.

¿Alguna idea sobre qué podría estar yendo mal?

+0

Es posible que desee utilizar 'arrayWithObject:' en lugar de 'alloc' y' initWithObjects: '. Entre otras razones, no lanzar la matriz no causará una fuga. –

+0

Esto era solo un pseudo código para lo que estoy tratando de lograr, estoy lanzando la matriz en mi código actual. – avenged

+0

Pregunta similar: http://stackoverflow.com/questions/1520522/nssortdescriptor-and-to- many -relationships – paulmelnikow

Respuesta

0

terminé agregando una propiedad de conteo en mi entidad, la incrementé cada vez que se agregó una nueva relación. hizo que fetchedResultsController sea más fácil de usar.

Sea interesado si encontró una forma de usar KVC. Nunca necesité arreglar este truco.

algo como esto puede ser útil:

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]]; 
+0

Me parece que debe ser una solución mejor y más elegante. ¿Alguien lo sabe? Gracias. – Ricardo

3

Por lo que yo sé que no se puede aplicar el @count en la consulta, pero se puede aplicar fácilmente a la matriz descabellada.

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]; 
1

I añadió el descriptor de acceso KVO -countOf<Key> como un atributo a mi modelo de objeto gestionado como un tipo entero. NO implementé nada para este atributo en mi subclase NSManagedObject, ya que toda la magia parece suceder bajo el capó.

Por lo tanto, en este caso particular, agregue un atributo countOfChildren a la entidad Parent. Esto debería eliminar la excepción.

EDITAR: Esta corrección parece funcionar solo en iOS 6.1, no en iOS 6.0.

+1

hey, ¿podría dar más detalles sobre esto? el autor debería haber agregado el atributo countOfChildren en el modelo, ¿verdad? ¿Qué tipo de atributo sería? ¿Hay más en esta configuración? –

Cuestiones relacionadas