【问题标题】:iPhone Core data entity lookupiPhone Core 数据实体查找
【发布时间】:2010-10-15 19:27:01
【问题描述】:

我有一个非常简单的问题,我确定有一个简单的解决方案,但是在互联网上搜索了 2 天后,我找不到任何东西 =(

情况如下:我决定将我的数据分成两个具有一对一关系的独立实体。所以我有 PERSON 实体和 FEATURES 实体。每个 PERSON 都有一个相关的 FEATURES 实体,其中 person_id 指向 PERSON。

那么如何从与特定人物相关的 FEATURES 中获取数据?我还没有找到任何与关系 ID 相关的谓词

我唯一能想到的就是在 FEATURES 上创建一个 person_name 属性,然后执行以下操作: predicateWithFormat:@"person_name = 'Bill'"

但这不会破坏建立关系的目的吗?

那么我该如何根据关系进行抓取呢??

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch core-data


    【解决方案1】:

    听起来您来自关系数据库背景。您应该将 FEATURE 到 PERSON 的关系存储在关系中,而不是属性中(您可能已经这样做了,但是您的命名 person_id 让我感到怀疑;标准的核心数据约定是将关系命名为 person 及其逆feature)。假设是这种情况,您可以使用谓词格式,如

    NSManagedObject *person ... //the person instance you want to search against
    NSPredicate *p = [NSPredicate predicateWithFormat:@"self.person == %@", person];
    

    当然,您应该定义反比关系 (PERSON=>FEATURE),在这种情况下您可以这样做

    NSManagedObject *feature = person.feature;
    

    假设您将这种关系命名为feature。 Core Data 使用逆向关系来保持对象图的一致性。它们的存储量很小,拥有它们的好处是显着的;如果没有真正充分的理由,您应该始终为 Core Data 模型中的所有关系定义逆向关系。

    【讨论】:

    • 感谢您的回复,但我仍然没有得到它:( 我可以使用此行很好地获取 PERSON 实体:NSManagedObject *person = [fetchedResultsController objectAtIndexPath:indexPath]; from在那里,我可以轻松地提取与该对象相关的 PERSON 上的任何属性。但是对于我的生活,我无法弄清楚如何访问与给定人员相关的 FEATURE 实体。我试过:NSManagedObject *feature = person.feature ,但我得到错误也试过 NSPredicate *p = [NSPredicate predicateWithFormat:@"self.person == %@", person]; 但它给出了一个“无法识别的选择器”
    • 我也不确定它应该是 self.person 还是 self.PERSON
    【解决方案2】:

    好的,我想我想通了。当我创建实体对象时,我需要明确设置关系 ID,而我没有这样做。我认为核心数据以某种方式在幕后管理了这一点。

    [features setValue:personObject forKey:@"features"];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多