NSPredicate
kann ich damit umgehen, aber ich bin mir nicht sicher, ob CoreData es als gültiges Prädikat für die Ausführung in einem Datenspeicher akzeptiert. Es könnte Probleme beim Konvertieren des bitweisen Operators in eine SQL-Abfrage geben (wenn Sie einen SQLite-Sicherungsspeicher verwenden). Du musst es nur versuchen.
Die Syntax ist jedoch genau das, was man erwarten würde:
NSPredicate * p = [NSPredicate predicateWithFormat:@"(3 & 1) > 0"];
NSLog(@"%@", p);
NSLog(@"%d", [p evaluateWithObject:nil]);
Logs:
3 & 1 > 0
1
Da diese auf einem binären typisierte Attribut zu tun (dh, eine als data
definiert , oder?) Das wird wahrscheinlich nicht funktionieren. Bitweise Operatoren sind nur sinnvoll, wenn sie mit ganzen Zahlen arbeiten (soweit ich sie verstehe), daher wäre es nicht sinnvoll, sie auf einer NSData
auszuführen. Konvertiere es zuerst in eine Zahl und dann könnte es funktionieren.
bearbeiten
Es scheint, dass SQLite diese Syntax unterstützt, da bitwise operators have been around since 2001, was bedeutet, dass Core Data wird es auch wahrscheinlich akzeptieren.
Das funktioniert !!!! Danke vielmals ! Ich war auch sehr zweifelhaft, dass CodeData in SQL übersetzen würde, aber ich habe es gerade getestet und es scheint zu funktionieren. – CodeFlakes
Fast immer sicherer zu überprüfen '(x & Bits)! = 0' statt' (x & Bits)> 0'. Der Grund dafür ist, dass das Setzen des höchsten Bits die Zahl negativ machen kann. Einzige Ausnahme ist, wenn Sie sich völlig sicher sind, dass die Nummer nicht signiert ist. – HughHughTeotl