【问题标题】:iOS Core Data: Fetch child Magical Record dataiOS Core Data:获取子 Magical Record 数据
【发布时间】:2014-09-27 15:50:03
【问题描述】:

我有 3 个核心数据实体。

MenuItems、Items、ItemLangs。

所有实体都有iItemId 属性。用户需要使用sItemName进行搜索,可以在ItemLangs中找到。

UITableView 包含MenuItems 的数组。

我已经尝试过filteredArrayUsingPredicate,但我的谓词不正确。是否需要先循环遍历MenuItems 的数组才能过滤数组?

这是我的谓词:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"sItemName LIKE %@", searchText];

我可以知道如何使用它来过滤我拥有的 MenuItems 数组吗?

谢谢!

【问题讨论】:

    标签: ios arrays search core-data predicate


    【解决方案1】:

    你需要的是这样的谓词:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sItemName CONTAINS[cd] %@", searchText];
    

    [cd] 代表不区分大小写。

    或者,如果你喜欢“LIKE”,请参考this answer。

    更新:

    您还应该查看要获取的数据项 - 在您的情况下为 sItemName。通过调试器,检查您的数据源数组返回什么对象?我指的是您要应用上述谓词的数组。可能有一些 keypath 层次结构涉及到通过 sItemName,在这种情况下,您需要使用点表示法,例如 Items.ItemLangs.sItemName。

    【讨论】:

    • 感谢您的回答。我认为我的谓词没有任何问题。问题在于我将如何使用谓词。 tableview 的内容是 MenuItems,谓词可以用在 ItemLangs 中。实体通过 iItemId 连接。 MenuItem -> 项目 -> ItemLangs
    • 也许您应该使用一些关键路径表示法(点语法,如 arraymember.Items.ItemLangs.sItemName)?
    • 我之前尝试过,使用 menuItems.Items.ItemLangs.sItemName。但是我应该如何在 MenuItems 数组中使用它。我应该遍历 MenuItems 吗?而且Items和ItemLangs的关系是很多的。
    • 正如我所说,检查包含 MenuItems 的数组 - 它应该告诉你。如果是一对多,它必须包含一组孩子。在这种情况下,您将首先从数组中获取一个 MenuItem 对象,然后访问名为 Items 的数组。在其中,您将找到每个 Item 成员。在它们中的每一个都将是 ItemLangs 数组,它将为您提供所需的 sItemName。您必须知道确切的数据项才能到达那里。
    【解决方案2】:

    【讨论】:

    • 感谢您的回答。在我在 stackoverflow 中发布之前,我已经检查了这些链接并没有找到正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 2015-09-14
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多