NSPredicate问题 - 找不到数据

时间:2012-08-28 16:16:16

标签: ios core-data nspredicate

我有一个像这样的核心数据模型:

ArticleCache:
- NSString *link

我有一些像这样的自定义对象:

Article:
- NSString *linkString //NSString version of link
- NSURL *link
- NSString *title

我有NSArray Article s(articleList以下),我有一个核心数据存储ArticleCache s。

我正在尝试检索ArticleCache中具有匹配链接的articleList

NSEntityDescription *articleCacheObjectModel = [NSEntityDescription entityForName:@"ArticleCache" inManagedObjectContext:backgroundContext];

// Setup the fetch request  
NSFetchRequest *request = [[NSFetchRequest alloc] init];  
[request setEntity:articleCacheObjectModel];

//search will return all items matching the link
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"link in %@", articleList];
[request setPredicate:searchPredicate];

NSError *error = nil;

NSArray *results = [backgroundContext executeFetchRequest:request error:&error];

当我运行它时,results始终为空,尽管我知道核心数据存储中存在匹配的ArticleCaches。我知道这一点,因为如果我从请求中删除谓词,我会得到所有ArticleCache,我可以打印出他们各自的link并进行比较。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

“ArticleCache”实体的“link”属性是一个字符串,在您的谓词中,您尝试测试此字符串是否包含在Article个对象的数组中。那永远不会匹配。

您可以首先构建一个字符串URL数组,例如

NSArray *urlList = [articleList valueForKey:@"linkString"];

然后在谓词中使用它:

[NSPredicate predicateWithFormat:@"link in %@", urlList];