NSPredicate 通过更改 IN 子句获取对象
Posted
技术标签:
【中文标题】NSPredicate 通过更改 IN 子句获取对象【英文标题】:NSPredicate fetching objects with changing IN clause 【发布时间】:2014-12-23 22:05:46 【问题描述】:所以我有这样的关系设置:
-
用户 -> (许多)发布帖子
用户(很多)(很多)用户朋友
一个用户有很多帖子,一个用户有很多朋友(用户)。我希望能够获得一组朋友创建的所有帖子。很容易。
这是棘手的一点。我希望 FetchedResultsController 在好友列表中添加或删除好友时更新帖子列表,而无需重建 Fetched Results Controller。我还希望获取的实体返回 Post 对象,因此我不必对 Fetched Results Controllers fetchedObjects 数组做任何额外的工作。
这可能吗?这是我当前的 FRC 设置
NSFetchRequest *postRequest = [[NSFetchRequest alloc] initWithEntityName:@"Post"];
postRequest.predicate = [NSPredicate predicateWithFormat:@"user IN %@",[self.user friends]];
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:postRequest managedObjectContext:....];
【问题讨论】:
我认为直接的答案是否定的,这是不可能的。但希望你能得到一些好的解决方法。出于何种目的,您能否澄清:a) 您是否需要 FRC 的部分构建功能(即 sectionNameKeyPath),以及 b) 您是否需要 FRC 的更改跟踪功能(即委托方法)?谢谢。 【参考方案1】:FRC 不会直接为您观察这一点,因为它只观察Post
对象的变化。您需要自己观察 friends
设置的变化,然后更新获取请求(因为没有返回到变异的朋友集的链接)并在 FRC 上显式调用 performFetch:
。
【讨论】:
以上是关于NSPredicate 通过更改 IN 子句获取对象的主要内容,如果未能解决你的问题,请参考以下文章
iphone NSPredicate 中的 Random() 子句排序
IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配
如何使用PL / SQL更改您在FOR循环IN子句中查询的表
将 NSPredicate/NSCompoundPredicate 与 Where 子句或可选返回一起使用,CloudKit