谓词表达式中的iOS Core Data二进制操作

时间:2014-12-08 21:46:17

标签: ios objective-c core-data nspredicate nsfetchrequest

这似乎与How to use binary flags in Core Data?相同,但在尝试时我得到了“不支持的函数表达式”。

我想创建一个谓词,它可以在我的Core Data对象存储中找到具有特定ID并且未设置某些二进制标志的实体。这是我的代码段:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ownerID = %@ AND ((banned & 8) == 0)", THEUSERUSERID];
NSFetchRequest *fetchRequest = [PCDUser MR_requestAllWithPredicate:predicate];

_frController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[COMMDBMANAGER magicalRecordStack] context] sectionNameKeyPath:sectionKeyPath cacheName:nil];

[_frController setDelegate:self];
[_frController performFetch:&error];

查看上面链接中的上一个问题,看起来应该可行。但是,我得到了一个

'NSInvalidArgumentException', reason: 'Unsupported function expression banned & 8'

因为我需要NSFetchedResultsController结果集(和indexPaths等)来包含过滤结果,所以我无法找到一种在事后过滤它们的方法,并且结果集包括过滤。< / p>

如何在Core Data中使用二进制标志?

1 个答案:

答案 0 :(得分:2)

我在NSFetchRequest中有一个类似的谓词并且它有效。检查模型中是否存在属性banned,并且该属性具有支持按位运算的类型(例如,Integer32)。