2012-05-16 4 views
7

Wie richte ich eine Abrufanforderung so ein, dass nur die Daten aus dem Attribut einer Entität mit einem bestimmten Wert abgerufen werden? Dies ist der grundlegende Code, den ich vorher benutzt habe.Abrufanforderung für 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]); 
    } 
} 

Ich habe auf dieser Seite suchen: http://bit.ly/KevYwR ist dies die richtige Richtung?

Muss ich NSPredicate verwenden oder kann ich ohne?

Vielen Dank für jede Hilfe, zeigt in der richtigen Richtung, usw.

Antwort

19

ein NSFetchRequest entspricht eine SELECT statetement in SQL-Sprache einrichten.

Hier ein einfaches Beispiel:

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 

Das Array results enthält alle verwalteten Objekte in der SQLite-Datei enthalten. Wenn Sie ein bestimmtes Objekt (oder mehrere Objekte) erfassen möchten, müssen Sie ein Prädikat mit dieser Anfrage verwenden. Zum Beispiel:

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

In diesem Fall results enthält die Objekte in dem Attribut Some Value gleich ist. Das Setzen eines Prädikats ist gleichbedeutend mit dem Setzen der WHERE-Klausel in einer SQL-Anweisung.

Hinweis

Ich nehme an, dass der Name des Unternehmens EntityName und seine Eigenschaft ist attribute genannt, die vom Typ String ist.

Für weitere Informationen empfehle ich Ihnen, die Core Data Programmieranleitung und NSFecthRequest Klassenreferenz zu lesen.

Hoffe, es hilft.