这好像和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 等)来包含过滤后的结果,所以我无法找到一种方法在事后过滤它们并让结果集包含过滤。
如何在 Core Data 中使用二进制标志?
最佳答案
我在 NSFetchRequest
中有一个类似的谓词并且它起作用了。检查属性 banned
是否存在于您的模型中并且具有支持按位运算的类型(例如,Integer32
)。
关于谓词表达式中的 iOS Core Data 二元运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367575/