【问题标题】:NSPredicate a relationship objectsNSPredicate 一个关系对象
【发布时间】:2014-09-08 07:32:19
【问题描述】:

我正在处理核心数据,我有两个表 列表 列表项

ListItems 有一个名为“parentlist”且目标设置为“List”的关系

我正在尝试查询 ListItems 的所有父级为 X(列表对象)的 listItems

我尝试过这种方法,但它不起作用

List* myList; // Initialized form other views
NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"List == %@",myList]];

【问题讨论】:

  • 这是在核心数据中吗?还是内存中的列表?

标签: ios objective-c core-data ios7


【解决方案1】:

您的代码中有两个问题:在谓词中您必须使用关系(“parentList”), 不是目标实体(“列表”)。而且您不应该将字符串格式与 谓词格式。

要获取与给定列表相关的所有 ListItems,谓词将是

List* myList = ...; 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"parentList == %@", myList];

【讨论】:

    【解决方案2】:

    我假设您正在寻找的不仅仅是通过列表访问 listItems 吗?如果是这样:
    比较核心数据中的对象实际上并不是这样工作的。 你可以通过以下两种方式之一来做到这一点, 简单:在创建时为列表分配 GUID:

    [[NSProcessInfo processInfo] globallyUniqueString]
    

    并使用它来比较两个列表。

    更难:通过覆盖比较对象来实现对象的比较功能,并以对您有意义的方式比较对象。

    - (NSComparisonResult) compare : (List *) other;
    

    然后使用块创建一个 NSPredicate。

    您还可以使用 GUID 并在比较函数中使用它,从而允许您稍后对此进行扩展。

    【讨论】:

      【解决方案3】:

      如果您有反向关系 listItems(如 Apple 推荐的那样),您可以只使用:

      myList.listItems
      

      【讨论】:

      • 我最终使用了这种方法。谢谢
      猜你喜欢
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多