2016-04-13 6 views
0

ich ein Array von Jahr/Monat Tupel haben:NSPredicate zurückzukehren Gegenstände mit in Arrays enthalten Eigenschaften

[(2015, 11), (2015, 12), (2016, 1), (2016, 2), (2016, 3), (2016, 4), (2016, 5), (2016, 6), (2016, 7), (2016, 8), (2016, 9)]

In meinem Coredata ManagedObjectModel, ich habe eine MonthlyReport Einheit, die year und month Eigenschaften (Int16) hat

Ich versuche einen effizienten Weg zu finden, alle Modelle zu holen, deren Jahr- und Monatseigenschaften mit den Tupeln aus dem Array übereinstimmen.

Ich habe versucht, die folgenden (mit uniqueYears und uniqueMonths Arrays von eindeutigen Werten):

let predicateYear = NSPredicate(format: "$name in $NAME_LIST", "year", uniqueYears) 
let predicateMonths = NSPredicate(format: "$name in $NAME_LIST", "month", uniqueMonths) 

let fetchRequest = NSFetchRequest(entityName: "EntityName") 
fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicateYear, predicateMonths]) 

aber das funktioniert nicht; Die App stürzt mit der Nachricht unimplemented SQL generation for predicate : ($name IN $NAME_LIST)'

Im Moment bin ich fest mit dem Abrufen dann manuell filtern alle Modelle, die weit von effizient ist.

Anregungen oder Hinweise würden

Antwort

1

geschätzt werden Es gibt keine einfache Möglichkeit, dies zu tun. Sie müssen ein ziemlich komplexes Prädikat erstellen, um die Kombinationen zu finden. Etwas wie dieses:

var predicate: NSPredicate 
for tuple in incomingTuples { 
    let singlePredicate = NSPredicate("year == %@ AND $month == %@", tuple.0, tuple.1) 
    if predicate == nil { 
    predicate = singlePredicate 
    } else { 
    predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [predicate, singlePredicate]) 
    } 
} 

Ich vermute, dass dies eine teure SQL-Abfrage sein wird.

+0

Meinst du 'orPredicateWithSubpredicates'? – pbasdf

+0

Sie sind korrekt, bearbeitet und aktualisiert. –

Verwandte Themen