2016-11-06 3 views
0

I-Kerndatenmodell haben:Filterkern Datenarray Bereich durch Anordnung von Werten

class Person: NSObject { 
    var personName: String? 
    var fruits: [String]? 
} 

Es gibt zwei Datensätze Probe in JSON Format:

Person 1:

{ 
    "name" : "John", 
    "fruits" : ["banana", "apple", "peach", "orange"] 
} 

Person 2 :

{ 
    "name" : "Alice", 
    "fruits" : ["cherry", "mango", "pear", "strawberry"] 
} 

Ich möchte fi lter Ergebnis nur Person zu erhalten, die cherry und mango mögen. Ich habe

var fruitFilter: [String] = ["cherry", "mango"] 

Wie ich NSPredicate gefiltert Einheit holen können?

var persons: [Person] = [] 

func fetchPersonWhoLike() { 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person") 
    request.predicate = NSPredicate(format: "?????????", fruitFilter) 
    ... 
} 

Als Ergebnis sollte ich erhalten persons["Alice"] entspricht.

+0

Mögliches Duplikat [Wie der „ALL“ Aggregat Betrieb in einem NSPredicate verwenden, um eine Coredata-basierte Sammlung zu filtern] (http://stackoverflow.com/questions/5302611/how-to-use-the-all- Aggregat-Operation-in-nspredicate-zu-Filter-a-coredata-b) – Larme

Antwort

0

Zuerst müssen Sie eine richtige zu viele Beziehungen mit einer Fruit Einheit mit, sagen wir, eine String Eigenschaft name haben.

Dann können Sie ein Prädikat wie folgt schreiben:

let soughtFruits = ["cherry", "mango"] 
request.predicate = NSPredicate(format: 
    "SUBQUERY(fruits, $f, $f.name IN [email protected])[email protected] = %d", soughtFruits, soughtFruits.count) 

Dies funktioniert nur, wenn es keine Duplikate sind.

Verwandte Themen