2012-08-23 15 views
5

Tengo un problema No sé de dónde proviene, relacionado con CoreData. En mi base de datos, tengo un conjunto de categorías (con nombre y descripción) que contienen elementos (usando una relación de uno a muchos).NSFetchedResultsController tiene 0 secciones

Quiero dividir mi vista de tabla en secciones con un atributo de la clase Category, pero cuando intento hacerlo usando sectionNameKeyPath:, el resultado NSFetchedResultsController tiene 0 secciones. Si paso nil a este parámetro, tiene 1 sección.

El código es el siguiente:

- (NSFetchedResultsController*) fetchedResultsController 
{ 
    if(fetchedResultsController) 
     return fetchedResultsController; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" 
               inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    // Set the batch size to a suitable number. 
    [fetchRequest setFetchBatchSize:10]; 

    // Edit the sort key as appropriate. 

    NSSortDescriptor *checkDescriptor = [[NSSortDescriptor alloc] initWithKey:@"checked" 
                    ascending:YES]; 
    NSSortDescriptor *indexDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderIndex" 
                    ascending:YES]; 
    NSArray *sortDescriptors = @[checkDescriptor, indexDescriptor]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                    managedObjectContext:self.managedObjectContext 
                    sectionNameKeyPath:@"checked" 
                       cacheName:nil]; 

    NSError *error = nil; 
    if (![fetchedResultsController performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
     return nil; 
    } else { 
     fetchedResultsController.delegate = self; 
     return fetchedResultsController; 
    } 
} 

Respuesta

1

Consulte la documentación NSFetchedResultsController: La clave utilizada para sectionNameKeyPath ("nombre" en su caso) debe ser la misma clave que se utiliza en el primer descriptor de clasificación ("marcada" en tu caso). Pueden ser diferentes, pero ambas claves deben generar el mismo orden relativo.

En su caso, supongo que desea agregar un descriptor de ordenamiento adicional en "nombre" y utilizarlo como el primer descriptor de ordenación.

+0

Sigue generando 0 secciones ... – gskbyte

+0

¿Has @sythesize your fetchedResultsController? Tuve un problema similar y este fue el problema. – Giovanni

Cuestiones relacionadas