我应该在持续更新关系中使用FetchedResultsController作为对象吗?

我有一个简单的Coredata模型,其中一个实体叫做“对话”,另一个是“消息”。 基本上,我需要重现iPhone的短信应用程序。

我从消息到对话有一对一的关系,从对话到消息有一对多的关系。

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

任何时候我启动我的应用程序,我所有的谈话都加载在我的fetchedResultsController。 如果我正确理解了Coredata是如何工作的,就像我有一种关系一样,每一条链接到我的对话的消息都会被加载。 我设置了一个批处理大小,这样我就不会同时加载所有的对话。

我的应用程序通过长时间的请求连接到服务器,所以我可以随时从服务器接收消息(将添加到coredata,然后使用NSNotification来告诉我的意见附加)。

我的问题是这样的:当我select一行时,我推动另一个视图在堆栈上,以便我可以看到我的消息。 我想知道如何做到这一点,原因是:

•我可以通过我的观点来看我的NSSet通过关系给出的信息,对吧? 然而,正如我可以收到一条消息,同时在看这个观点,我如何刷新传递给视图的NSSet?

•我也可以在该视图中使用另一个fetchedresultController,但在这种情况下,我将无故将我所有的消息预加载到先前的视图中? 我可以告诉coredata不要加载他们在我以前的观点?

我希望这是清楚的。 我有点绝望,我知道那个网站上有一些专家。 让我知道如果你需要别的东西,我会尽快提供更多的信息。

如果我正确理解Coredata是如何工作的,因为我有一个关系,每一条链接到我的对话的消息都会被加载。

Message对象本身不加载,直到您查询关系。 在那之前,他们至多只是错误(幽灵占位符)。

通常情况下,您只需传递用户在第一个表中select的Conversation对象。 在第二个tableview控制器中,然后你会问Conversation对象的相关消息。 然后你将它们排列成一个数组来显示。

然而,如果你有一个messages关系不断被新的Message对象更新的情况,那么你可能想要使用一个NSFetchedResultsController(FRC),只是因为你得到了新的更新的Message对象的所有自动通知。

为此,您可以像上面那样传递Conversation对象,然后在FRC的谓词中使用它,如下所示:

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

然后照常执行FRC委托方法。

当然,你可以从上下文注册NSManagedObjectContextObjectsDidChangeNotification的第二个tableview控制器,并直接处理所有这些,但是对于新手FRC可能更容易。