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

标签 iphone core-data nspredicate bit-fields nsfetchrequest

我的 Core Data 数据库中有一个 int32 属性。 我使用这个 int 作为 enum 位字段。

是否可以创建一个NSPredicate来基于二进制查询项目 这个 int 的值?类似于 @"bitFieldAttribute & 0x0001"

我还想知道这是否可以使用二进制类型属性实现?

最佳答案

NSPredicate 可以处理它,但我不确定 CoreData 是否会接受它作为在数据存储上执行的有效谓词。将按位运算符转换为 SQL 查询时可能会遇到问题(如果您使用的是 SQLite 后备存储)。您只需尝试一下即可。

但是,语法正是您所期望的:

NSPredicate * p = [NSPredicate predicateWithFormat:@"(3 & 1) > 0"];
NSLog(@"%@", p);
NSLog(@"%d", [p evaluateWithObject:nil]);

日志:

3 & 1 > 0
1

至于在二进制类型的属性上执行此操作(即定义为data,对吗?),这可能行不通。位运算符只有在对整数进行操作时才真正有意义(据我所知),因此在 NSData 上执行它没有多大意义。先把它转成数字,然后就可以了。

编辑

看起来 SQLite 支持此语法,因为 bitwise operators have been around since 2001 ,这意味着 Core Data 也可能会接受它。

关于iphone - 如何在 Core Data 中使用二进制标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716734/

相关文章:

iphone - 适用于 iPhone 屏幕的回流 PDF (iPhone SDK)

iphone - ALAssets库显示的相册顺序

ios - 如何在SwiftUI中汇总过滤后的核心数据?

ios - 如何测试 Core Data SQLite 文件是否加密?

core-data - NSPredicate 的 NSFetchedResultsController 未更新

javascript - 如何在移动网络应用程序(Android 浏览器/iOS-Mobile Safari)上禁用横向/纵向切换

iphone - 如何获取核心数据以从托管对象模型创建 SQLite 数据库

iphone - NSPredicate 格式等同于 SQL 查询

swift - 没有 "as CVarArg"无法将日期传递给 NSPredicate(格式 : . ..)

ios - iOS中pod install命令的工作流程