如何为 CoreData 中包含 NSArray 的二进制数据创建 NSPredicate?

Posted

技术标签:

【中文标题】如何为 CoreData 中包含 NSArray 的二进制数据创建 NSPredicate?【英文标题】:How to create a NSPredicate for a Binary data containing a NSArray in CoreData? 【发布时间】:2016-03-02 17:02:47 【问题描述】:

我需要通过存储如下 NSArray 的二进制数据属性来过滤实体

NSArray *myArray = @[@'description':'tag1',
                     @'description':'tag2']

并且Entity属性存储为NSKeyedArchiver:

self.tags = [NSKeyedArchiver archivedDataWithRootObject:myArray];

是否可以创建一个 NSPredicate 来帮助我过滤它?

我尝试过使用tags contains[cd] 'tag1',但它没有运行。

【问题讨论】:

正如 Tom 所写,您可以使用等式运算符(>、== 和 != 对二进制 blob 意味着什么真的很有用。当然,最好的选择是将标签存储为正确的多对多关系,而不是将它们填充到一个 blob 中。 @Avi,我的问题是我现在无法更改模型。所以我必须与这个麻烦作斗争。但是当我对 Tom 发表评论时,我将尝试使用 NSPredicate predicateWithBlock:NSArray filteredArrayUsingPredicate: 过滤我的实体,我可以在其中定义条件以检查对象是否必须在我的结果中。 【参考方案1】:

您不能使用谓词根据二进制属性进行过滤。至少,NSPredicate 不会帮助您,Core Data 中也没有任何帮助。如果它是 == 谓词,那么它可能会起作用。除此之外,您可能能够找到在过滤器中使用的正确位模式,但您必须根据一些独立研究自己计算出这些位。但作为一般规则,Core Data 二进制属性不适用于谓词。

【讨论】:

是的,我正在尝试使用NSPredicate predicateWithBlock:NSArray filteredArrayUsingPredicate: 一起使用,以过滤我的结果。如果我有好的解决方案,我会在这里发布

以上是关于如何为 CoreData 中包含 NSArray 的二进制数据创建 NSPredicate?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ID 名称中包含方括号的选项设置“选定”值? [复制]

如何为雅虎电子邮件添加我的品牌标志?

在使用 CoreData 的 RestKit 的 mappingResult 中包含 foreignKeys 关系

如何获取 NSFontCollection 中包含的字体数组?

将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

如何为 CoreData 多对多关系编写 NSPredicate