【问题标题】:Implementing Tagging using Core Data on the iPhone在 iPhone 上使用 Core Data 实现标记
【发布时间】:2010-04-26 12:17:17
【问题描述】:

我有一个使用 CoreData 的应用程序,我正在尝试找出实现标记和按标记过滤的最佳方法。出于我的目的,如果我在原始 SQLite 中执行此操作,我只需要三个表,tagsitem_tags,当然还有我的items 表。然后过滤就像连接三个表一样简单,其中只有items 与给定标签相关。很简单。

但是,有没有办法在 CoreData 中执行此操作并利用 NSFetchedResultsControllerNSPredicate 似乎没有让您能够过滤连接。 NSPredicate's 无论如何都不是完整的 SQL,所以我可能在那里找错了树。我试图避免在没有 CoreData 的情况下使用 SQLite 重新实现我的应用程序,因为我很享受 CoreData 在其他领域为我提供的性能。是的,我确实考虑过(并构建了一个测试实现)深入研究 CoreData 生成的原始 SQLite,但这不是未来的证据,我也想避免这种情况。

有没有其他人尝试在 UITableViewNSFetchedResultsController 中使用 CoreData 解决标记/过滤问题

【问题讨论】:

    标签: iphone objective-c core-data tagging


    【解决方案1】:

    首先,您实际上不需要Item_Tags 实体。 Core Data 能够在不需要中间实体的情况下对多对多关系进行建模。您可以拥有一对多 tags 关系,也可以拥有一对多 items 关系,Core Data 将在幕后发挥所有作用。

    因此,要设置获取请求以执行您所描述的操作,您需要执行以下操作。假设您有一个tag,它代表您要过滤的标签。像这样写一个谓词:

    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%@ IN tags", tag]];
    

    这将为您提供一个谓词,该谓词仅返回在其tags 关系集中具有tagItems。很容易吧?

    记住:Core Data 不是数据库。这是一个对象图管理系统。它在幕后使用 SQL 的事实不应该影响您使用它的方式。

    【讨论】:

    • 哇,这就是它所需要的,它对获取的结果控制器是否有效?听起来不错。我会考虑实施这个。是的,我知道 Core Data 不是数据库。我一直在很好地利用它作为持久对象图的目的。但是当谈到这个问题时,正是我对这些 NSPredicates 之类的工作原理缺乏了解,这让我对我对 SQL 的了解感到松懈。 :)
    猜你喜欢
    • 2011-11-02
    • 2011-01-19
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多