如何为 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)