-->

我应该使用一个FetchedResultsController的对象在不断更新的关系?(Should

2019-10-29 19:30发布

我有一个名为“对话”,另一种“消息”一个实体的简单Coredata模型。 基本上,我需要那种重现iPhone短信应用。

我有一个从消息谈话一对一关系和一对多从谈话的消息。

Conversation{
    messages<-->>Message.conversation
}

Message{
    conversation<<-->Conversation.messages
}

每当我启动我的应用程序,我所有的谈话都装在我的fetchedResultsController。 如果我理解正确Coredata是如何工作的,因为我有一个关系,联系到我谈话的每个消息都将被载入,以及对不对? 我成立了一个批量大小,这样我就不会加载我在同一时间的所有会话。

我的应用程序是通过长拉取请求连接到服务器,这样我就可以随时接收来自服务器的消息(也将被添加到coredata,然后我用NSNotification告诉我的观点的东西追加)。

我的问题是这样的:当我选择一排,我推在栈上另一种观点认为,这样我可以看到我的消息。 我想知道如何做到这一点,并有原因:

•我能通过我的看法我通过关系给出消息的NSSet,对不对? 不过,我可以收到一条消息,而看这一观点,我怎么刷新的NSSet传递到视图?

•我也可以使用其他fetchedresultController在该视图中,但在这种情况下,我会预载我在我以前的所有留言没有理由? 我可以告诉coredata不加载他们在我以前的观点?

我希望这是不够清楚。 我有点绝望,我知道有该网站上的一些专家。 让我知道如果你有什么事,我会尝试尽快提供更多信息。

Answer 1:

如果我理解正确Coredata是如何工作的,因为我有一个关系,联系到我谈话的每个消息都将被载入,以及对不对?

Message对象本身不加载,直到您查询的关系。 在此之前,他们是在最公正的故障(鬼占位符。)

通常情况下,你会简单地通过Conversation ,用户在第一个表中选择的对象。 在第二的tableview控制器,那么您需要问Conversation对象是相关的消息。 然后,你将它们整理成用于显示一个数组。

但是,如果你有其中一种情况messages关系不断用新的更新Message的对象,那么你可能想使用一个NSFetchedResultsController(FRC)只是因为你新更新的所有自动通知Message的对象。

要做到这一点,你会通过Conversation对象上面,然后在断言对于FRC像这样使用它:

NSPredicate *p=[NSPredicate predicateWithFormat:@"conversation==%@",passedConversationObject];

然后实现FRC委托方法如常。

当然,你可以报名参加第二次的tableview控制器NSManagedObjectContextObjectsDidChangeNotification从上下文和直接处理这一切,但对于一个新手的FRC可能会更容易。



文章来源: Should I Use a FetchedResultsController for Objects in a Constantly Updating Relationship?