【问题标题】:iOS Core Data binary operation in predicate expression谓词表达式中的 iOS Core Data 二元运算
【发布时间】:2014-12-08 21:46:16
【问题描述】:

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

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

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)吗?
  • 谢谢。我一直在帮助后端 mysql 数据库上的一个 node.js 人,该数据库支持这个应用程序(以及数据库中的这个 CD 存储从中派生数据),我的脑海中该属性的名称错误。在 CD 架构中我有 bannedFlags 但在 mysql banned [不要问为什么,因为我不知道] 并且在与 banned 打交道的漫长周末之后,今天早上我脑子里放了个屁。感谢您提醒您仔细检查显而易见的内容。做出回答,我会接受的。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2017-11-05
    相关资源
    最近更新 更多