我有一个像这样的核心数据模型:
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
并进行比较。
有什么想法吗?
答案 0 :(得分:2)
“ArticleCache”实体的“link”属性是一个字符串,在您的谓词中,您尝试测试此字符串是否包含在Article
个对象的数组中。那永远不会匹配。
您可以首先构建一个字符串URL数组,例如
NSArray *urlList = [articleList valueForKey:@"linkString"];
然后在谓词中使用它:
[NSPredicate predicateWithFormat:@"link in %@", urlList];