【问题标题】:Core Data Transformable NSArray of IDs核心数据可转换 NSArray 的 ID
【发布时间】:2014-03-09 00:15:42
【问题描述】:

我有一个 CoreData 实体类 X,它在一个可转换的属性(比如说 someIDs)内存储了一个 NSString ID 的 NSArray...

给定一个 NSString ID,我如何在其 someIDs 属性中找到(使用谓词)所有包含 ID 的实体 X?

注意:我知道关系(因此无需建议使用关系)等,但在这种情况下该怎么办?

【问题讨论】:

    标签: ios objective-c core-data nspredicate


    【解决方案1】:

    你不能。可转换属性作为数据块存储在 SQLite 存储文件中(使用 NSCoding 方法)。核心数据获取请求(转换为 SQLite 查询) 无法访问可转换属性的内容。

    如果您不想使用多对多关系,那么您只能获取所有对象并过滤获取的NSArray。

    【讨论】:

    • 我相信这是可能的,请参阅stackoverflow.com/questions/15204498/…
    • @PeterLapisu:它似乎适用于 == 或 !=,例如 [NSPredicate predicateWithFormat:@"someIDs == %@", @[@"12", @"34"]]。在这种情况下,右侧将转换为 SQLite 查询中使用的数据块。如果您将启动参数“-com.apple.CoreData.SQLDebug 3”添加到您的方案设置中,您可以看到这一点。它不适用于"ANY someIDS == %@"。
    • 是的,所以只测试了直接相等性......但仍然相信 CD 有一种方法可以解决这个问题,即取消归档 blob 并执行操作(使用 predicateWithLeftExpression)
    • @PeterLapisu:如果你发现了什么,请告诉我! - 请注意,过滤是在 SQLite 级别完成的。 - 对于所有 Core Data 调试,我只能建议设置“-com.apple.CoreData.SQLDebug 3”(选择 3 或 1)以查看实际发生的情况。
    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多