Das Problem ist wegen *%@*
hier %@
zwischen dem *
nicht durch ein String-Argument ersetzt, so NSPredicate
nicht in der Lage ist, Ihre Abfrage LIKE *apple*
und LIKE *macbook*
zu machen, was Sie tun müssen, ist zu machen eine Suchzeichenkette mit Wildcards und mit Like einfach %@
verwenden, auch als @Vadian vorgeschlagene Verwendungsnummer anstelle von Bool
.
let searchkeyword1 = "apple"
let searchkeyword2 = "macbook"
//Make search string wildcards charaters
let searchString1 = "*\(searchkeyword1)*"
let searchString2 = "*\(searchkeyword2)*"
fetchRequest.predicate = NSPredicate(format: "rec_name LIKE[cd] %@ AND rec_name LIKE[cd] %@ AND isActive = %@", searchString1,searchString2, true as NSNumber)
Auch Option Teig hier ist man CONTAINS
und keine Notwendigkeit verwenden können Platzhalter zu verwenden.
fetchRequest.predicate = NSPredicate(format: "rec_name CONTAINS[cd] %@ AND rec_name CONTAINS[cd] %@ AND isActive = %@", "apple","macbook", true as NSNumber)
Sie können noch etwas tun, wenn Sie alle Rekord beginnen mit Apfel finden wollen und mit macbook enden dann können Sie einfach BEGINSWITH
und ENDSWITH
fetchRequest.predicate = NSPredicate(format: "rec_name BEGINSWITH[cd] %@ AND rec_name ENDSWITH[cd] %@ AND isActive = %@", "apple","macbook", true as NSNumber)
Ein Platzhalter für einen 'Bool' ist' % d' oder '% ld' anstatt% @' – vadian
@vadian, danke für deine Hilfe, aber es funktioniert immer noch nicht! – nirav
Versuchen Sie Folgendes: Lassen Sie Prädikat = NSPredate (Format: "rec_name LIKE [CD] *% @ * UND rec_name LIKE [CD] *% @ * und isActive =% @", "Apple", "Macbook", NSNumber (booleanLiteral: true)) – KKRocks