Estoy teniendo un problema (problema de la comprensión para ser honesto) con NSFetchedResultsController y las nuevas relaciones NSOrderedSet disponibles en iOS 5.NSFetchedResultsController y NSOrderedSet relaciones
tengo el siguiente modelo de datos (bien, mi verdadero uno no está cajón de calcetines y de) pero esto sirve como un ejemplo sencillo:
cajón del calcetín y son ambos NSManagedObjects en un modelo/almacén de datos básicos. En Drawer
la relación socks
es una ordenada a muchas relaciones a Sock
. La idea es que los calcetines estén en el cajón en un orden específico. En Sock
, la relación drawer
es la inversa de la relación socks
.
En un UIViewController estoy dibujando un UITableView basado en estas entidades. Estoy alimentando la mesa usando un NSFetchedResultsController
.
- (NSFetchedResultsController *)fetchedResultsController1 {
if (_fetchedResultsController1 != nil) {
return _fetchedResultsController1;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sock" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"drawer.socks" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
self.fetchedResultsController1 = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:@"SocksCache"];
self.fetchedResultsController1.delegate = self;
return _fetchedResultsController1;
}
Cuando ejecuto esto, me sale el siguiente errror: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'
Esto tiene sentido para mí, ya que la relación es una NSOrderedSet
y no una sola entidad con el que comparar con fines de clasificación.
Lo que quiero lograr es que el Socks
aparezca en el UITableView
en el orden especificado en la relación socks
. Realmente no quiero tener un orden de clasificación sino NSFetchedResultsController
, que es un gran componente que insiste en que tiene que haber uno. ¿Cómo puedo decirle que use el orden de los calcetines en la entidad del cajón? No quiero que la tabla muestre entidades de cajones.
Nota: Estoy usando esto solo en una aplicación iOS5, por lo que las relaciones ordenadas están disponibles.
Cualquier persona que pueda ofrecerme cualquier dirección, sería muy apreciada. Gracias por tu tiempo.
Edit: Así que la tabla que muestra los calcetines lo hace para solo un cajón. Solo quiero que la vista de tabla respete el orden que contiene la relación de calcetines. No estoy seguro de qué establecer los criterios de clasificación para garantizar que eso suceda.
Damien, parece que ha resuelto esto. Cuando dice "en el orden especificado en la relación 'calcetines'", ¿cómo hace para especificar el orden de la relación? En el editor, puedo ver una casilla de verificación (ordenada o no), pero nada para controlar los criterios de clasificación. – jhabbott
@jhabbott. Cuando especifica una relación ordenada (usando la casilla de verificación), la relación se representa mediante un NSOrderedSet. A continuación, puede usar los métodos de conjuntos ordenados habituales para controlar el orden. – Damien
Bien, ahora empiezo a usar el método 'insertObject: inSocksAtIndex:' generado, pero recibo una excepción de selector no reconocido. Pensé que el contexto del objeto administrado agregaría esto en tiempo de ejecución? – jhabbott