【问题标题】:Core Data: Fetch via specific property (join relationship)核心数据:通过特定属性获取(连接关系)
【发布时间】:2011-04-13 03:51:21
【问题描述】:

我有一个核心数据模型如下

Pageattributes 属性是一组DictionaryEntry,它们是我的页面对象的值,很像标准的NSDictionary(除了所有keysvalues 都是字符串)

我有一个Page,其中有一个DictionaryEntrykey="title"value="Home"。我将如何形成一个获取请求来加载该特定页面?

【问题讨论】:

    标签: iphone macos core-data nsfetchrequest


    【解决方案1】:

    假设您首先知道“标题”的 DictionaryEntry 的“键”。

    当你创建一个 NSPredicate 时,为什么不使用你已知的“key”在 DictionaryEntry 对象上创建一个 NSFetchRequest。

        NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"DictionaryEntry" inManagedObjectContext:_context]];
    [request setPredicate:[NSPredicate predicateWithFormat:@"key == %@", keyValue]];
    

    一旦您拥有有效的 DictionaryEntry 对象,您就可以使用 CoreData 的“页面”关系来获取您的有效页面。

    【讨论】:

      【解决方案2】:

      您应该看看子查询的谓词语法。您不能使用通常的 ANY 关键字,因为这只允许您同时匹配一列而不是两列。

        NSString *keyValue = @"title";
        NSString *valueValue = @"home";
      
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        [request setEntity:[NSEntityDescription entityForName:@"Page" inManagedObjectContext:_context]];
        [request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(attributes, $a, $a.key == %@ && $a.value == %@).@count != 0)", keyValue, valueValue]];
      

      更简单的谓词ANY attributes.key = "title" AND ANY attributes.value = "home" 不起作用,因为它还返回具有两个字典的页面,例如key='addr'/value='home' 和 key='title'/value='pete'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        相关资源
        最近更新 更多