2012-05-16 12 views
7

¿Cómo configuro una solicitud de recuperación para extraer solo los datos del atributo de una entidad con un valor particular? Este es el código básico que he usado antes.solicitud de recuperación para entity.attribute == @ "somevalue"

-(void)fetchResults 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:self.entityDescription.name]; 
    NSString *cacheName = [self.entityDescription.name stringByAppendingString:@"Cache"]; 

    // predicate code 
    if (self.predicate != nil) { 
     [fetchRequest setPredicate:self.predicate]; 
    } 
    // end of predicate code 

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:cacheName]; 

    BOOL success; 
    NSError *error; 
    success = [self.fetchedResultsController performFetch:&error]; 
    if (!success) 
    { 
     NSLog(@"%@", [error localizedDescription]); 
    } 
} 

He estado buscando en esta página: http://bit.ly/KevYwR es esta la dirección correcta?

¿Debo usar NSPredicate o puedo prescindir?

Gracias por cualquier ayuda, apuntan en la dirección correcta, etc.

Respuesta

19

La creación de un NSFetchRequest es equivalente a un statetement SELECT en el lenguaje SQL.

Aquí un ejemplo sencillo:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:moc]]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error:&error]; 

// error handling code 

La matriz results contiene todos los objetos gestionados contenidos en el archivo de SQLite. Si quiere agarrar un objeto específico (o más objetos), necesita usar un predicado con esa solicitud. Por ejemplo:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@", @"Some Value"]; 
[request setPredicate:predicate]; 

En este caso results contiene los objetos donde atributo es igual a Some Value. Establecer un predicado es igual a poner la cláusula WHERE en una declaración SQL.

Nota

supongo que el nombre de la entidad es EntityName y su propiedad se llama attribute que es de tipo cadena.

Para obtener más información, le sugiero que lea la guía de programación Core Data y la referencia de clase NSFecthRequest.

espero que ayude.

Cuestiones relacionadas