在iPhone上使用核心数据实现标记

时间:2010-04-26 12:17:18

标签: iphone objective-c core-data tagging

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

但是,有没有办法在CoreData中使用NSFetchedResultsControllerNSPredicate似乎没有让您能够通过联接进行过滤。 NSPredicate's不是完整的SQL,所以我可能在那里咆哮错误的树。我正在努力避免使用没有CoreData的SQLite重新实现我的应用程序,因为我很享受CoreData在其他领域给我的性能。是的,我确实考虑过(并构建了一个测试实现)潜入CoreData生成的原始SQLite,但这不是未来的证据,我也想避免这种情况。

是否有其他人尝试使用UITableView NSFetchedResultsController来解决使用CoreData进行标记/过滤的问题

1 个答案:

答案 0 :(得分:9)

首先,您实际上不需要Item_Tags实体。核心数据能够模拟多对多关系,而无需中间实体。你可以拥有一个多对多tags关系,它具有倒数到多items的关系,而核心数据将会在幕后发挥作用。

因此,要设置获取请求以执行您描述的操作,您可以执行类似的操作。假设您有tag表示要过滤的标记。写一个这样的谓词:

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

这将为您提供一个谓词,该谓词仅返回在Item关系集中tag的{​​{1}}。很简单,对吧?

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