【问题标题】:NSPredicate Issue - Not finding dataNSPredicate 问题 - 未找到数据
【发布时间】:2012-08-23 04:57:25
【问题描述】:

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

ArticleCache:
- NSString *link

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

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

我有一个NSArrayArticles(下面是articleList),并且我有一个带有ArticleCaches 的核心数据存储。

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

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 始终为空,尽管我知道 Core Data 存储中有匹配的 ArticleCaches。我知道这一点,因为如果我从请求中删除谓词,我会得到所有 ArticleCaches,我可以打印出它们各自的 links 并进行比较。

有什么想法吗?

【问题讨论】:

    标签: ios core-data nspredicate


    【解决方案1】:

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

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

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

    然后在谓词中使用它:

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

    【讨论】:

    • 德普。谢谢。出于某种原因,我虽然魔法 NSPredicate 会查看我的对象。事实上,它与每个Articletitle 属性(无论出于何种原因)进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2015-05-05
    • 1970-01-01
    • 2019-04-04
    • 2019-01-03
    相关资源
    最近更新 更多