使用NSPredicate搜索核心数据实体的NSArray属性

时间:2012-01-13 03:28:04

标签: objective-c core-data nspredicate

我已经广泛搜索以找到解决此问题的方法。我的所有尝试都会导致0结果。以下是一般数据结构:

Core Data Entity A {
  stringAttribute string
  ....
  transformableAttribute(NSArray of NSString objects) keywords
}

其中keywords = [NSArray arrayWithObjects:@“string 1”,@“string 2”,@“string 3”,nil]

我正在尝试运行谓词来搜索NSArray可转换属性。

我针对实体A尝试了以下操作。核心数据存储是一个sqlite存储。

NSString *term = @"string 1";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY keywords like[cd] %@", term];

---->结果为0场比赛

NSArray *termArray = [NSArray arrayWithObject:@"string 1"];
NSPredicate *predicate = [NSPredicate predicateWithFormat@"ANY keywords in %@", termArray];

---->结果为0场比赛

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(keywords, $x, $x like %@).@count > 0", term]

---->导致非关系不能是子查询集合的错误

我已经尝试了上述的一些排列,但仍然没有结果。有什么建议?这可能与核心数据有关吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我没有使用transformableAttribute,这是我没有进入的核心数据元素,但如果我记得你无法预测它们。 (所以,如果我错了,请有人打电话给我)

但当我看到你的transformableAttributearray of string时,我只想说why do you want an array in a database?

为什么不建立关系?如果您的数组可以具有不同数量的字符串,则为一对多关系。

核心数据是数据库的抽象,在不使用数组的数据库中,您使用表。这可能会简化你的生活并使得抓取成为可能。