2016-02-08 6 views
18

Attualmente, ho un semplice NSFetchRequest con un NSPredicate associato. Tuttavia, mi auguro che ci sia un modo per aggiungere più predicati. Ho visto esempi in Objective C, ma nessuno per Swift.Più NSPredicates per NSFetchRequest in Swift?

È possibile definire un elenco di NSPredicate o aggiungere più oggetti NSPredicate a un singolo NSFetchRequest in qualche modo?

Grazie!

+2

l'API è lo stesso modo degli esempi che hai visto sono validi - provare e codice mostrato se avete un problema – Wain

risposta

31

È possibile utilizzare "NSCompoundPredicate". Per esempio:

let converstationKeyPredicate = NSPredicate(format: "conversationKey = %@", conversationKey) 
    let messageKeyPredicate = NSPredicate(format: "messageKey = %@", messageKey) 
    let andPredicate = NSCompoundPredicate(type: NSCompoundPredicateType.AndPredicateType, subpredicates: [converstationKeyPredicate, messageKeyPredicate]) 
    request.predicate = andPredicate 

È possibile modificare in "AndPredicateType" o "OrPredicateType"

+0

Ma cosa succede se messageKeyPredicate in questo esempio, esiste solo in determinate situazioni. C'è un modo elegante per evitare il codice spagetti nel tentativo di costruire il NSCompoundPredicate? – ardevd

+0

Non importa, basta creare un elenco di NSPredicati che va bene! Grazie! – ardevd

+0

Possiamo usare andPredicate - o qual è la differenza? let ePredicate = NSCompoundPredicate (ePredicateWithSubpredicates: [predicateIsNumber, predicateIsEnabled]) – davidrynn

5

Aggiornamento per Swift 4

 let predicateIsNumber = NSPredicate(format: "isStringOrNumber == %@", NSNumber(value: false)) 
     let predicateIsEnabled = NSPredicate(format: "isEnabled == %@", NSNumber(value: true)) 
     let andPredicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.and, subpredicates: [predicateIsNumber, predicateIsEnabled]) 

     //check here for the sender of the message 
     let fetchRequestSender = NSFetchRequest<NSFetchRequestResult>(entityName: "Keyword") 
     fetchRequestSender.predicate = andPredicate 

La variazione ultima Swift versione è:

NSCompoundPredicateType.AndPredicateType replaced by `NSCompoundPredicate.LogicalType.and ` 

Spero che aiuti !!!

Grazie

Problemi correlati