2014-03-06 9 views
5

Mein Kerndatenmodell:Kerndaten - holen das Match-Attribut einer der Werte in einem Array

Person 
====== 
personId (NSNumber) 

Dies ist eine grundlegende Frage Kerndaten,
Ich habe ein Array von personIds (nicht Person, nur NSNumber von ids) und ich möchte alle Persons mit entsprechenden ID im Array abrufen.

Dies ist, wie ich eine Person zu holen, die eine ID entsprechen:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"]; 
    request.predicate = [NSPredicate predicateWithFormat:@"personId = %@", onePersonId]; 

ich nach einer Möglichkeit, mehr Personen zu holen, die für

Antwort

13

Use ‚IN‘ Spiel mit mehreren IDs entsprechen dies:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"personId IN %@", idsArray]; 
+0

Dank für Ihre Hilfe – Mario

+0

Es ist gut, dass Swift dies zumindest viel zu tun. Ich bin an rohe SQL-Abfragen gewöhnt, die die wirkliche Macht liefern, aber Core Data ist sehr einschränkend. – zeeshan

0

Hier ist Code, der Prädikat erstellt, die Sie mit Block suchen.

NSPredicate *predicate= [NSPredicate predicateWithBlock:^BOOL(Person *person, NSDictionary *bind){ 
    return [arrayOfIds containsObject:person.personId]; //check whether person id is contained within your array of IDs 
}]; 
+0

Beachten Sie, dass blockbasierte Prädikate (und Objective-C-basierte Prädikate im Allgemeinen) nicht mit einer Core Data-Abrufanforderung verwendet werden können. –

0

Swift

let ids: [NSNumber] = [1234, 5678] 
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "YourEntityName") 
fetchRequest.predicate = NSPredicate(format: "id IN %@", ids) 

Voll Beispiel:

func getAllThings(withIds ids: [NSNumber]) -> [Thing] { 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Thing") 
    fetchRequest.predicate = NSPredicate(format: "id IN %@", ids) 

    do { 
     if let things = try context.fetch(fetchRequest) as? [Thing] { 
      return things 
     } 
    } catch let error as NSError { 
     // handle error 
    } 

    return [] 
}