2012-05-16 9 views
7

Come impostare una richiesta di recupero per estrarre solo i dati dall'attributo di un'entità con un valore particolare? Questo è il codice base che ho usato prima.richiesta di recupero per 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]); 
    } 
} 

Ho cercato in questa pagina: http://bit.ly/KevYwR è questa la direzione giusta?

Devo usare NSPredicate o posso fare a meno?

Grazie per qualsiasi aiuto, punto nella giusta direzione, ecc

risposta

19

Impostazione di una NSFetchRequest è equivalente a uno statetement SELEZIONA in linguaggio SQL.

Ecco un semplice esempio:

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 

L'array results contiene tutti gli oggetti gestiti contenuti all'interno del file di SQLite. Se vuoi prendere un oggetto specifico (o più oggetti) devi usare un predicato con quella richiesta. Ad esempio:

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

In questo caso results contiene gli oggetti dove attributo è uguale a Some Value. L'impostazione di un predicato equivale a inserire la clausola WHERE in un'istruzione SQL.

Nota

Suppongo che il nome del soggetto è EntityName e la sua proprietà è chiamata attribute che è di tipo stringa.

Per ulteriori informazioni, suggerisco di leggere la guida di programmazione di Core Data e il riferimento di classe NSFecthRequest.

Speranza che aiuta.

Problemi correlati