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

Jon*_*enn 3 iphone tagging core-data objective-c

我有一个使用CoreData的应用程序,我正在尝试找出通过标记实现标记和过滤的最佳方法.对于我而言,如果我是在原料的SQLite这样我就只需要三张表,tags,item_tags当然还有我的items表.然后过滤就像在三个表之间连接一样简单,只有items与给定标签相关.相当简单.

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

有任何人试图解决标签/在与CoreData过滤UITableViewNSFetchedResultsController

Ale*_*lex 9

首先,您实际上不需要Item_Tags实体.核心数据能够模拟多对多关系,而无需中间实体.你可以拥有一个tags具有互惠对多items关系的多对多关系,而核心数据将完成所有魔术,使其在幕后发生.

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

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%@ IN tags", tag]];
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个谓词,该谓词仅返回其关系集中的Items .很简单,对吧?tagtags

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