0

我有一個簡單的Coredata模型,其中一個實體叫做「對話」,另一個是「消息」。基本上,我需要重現iPhone短信應用程序。我應該在持續更新關係中使用FetchedResultsController作爲對象嗎?

我從消息到會話和從對話到消息的多對一的關係。

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

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

無論何時我啓動我的應用程序,我的所有對話都加載到我的fetchedResultsController中。如果我正確理解Coredata是如何工作的,因爲我有一種關係,那麼與我的對話鏈接的每條消息都將被加載,對嗎?我設置了一個批處理大小,這樣我就不會同時加載所有的對話。

我的應用程序通過長時間的拉取請求連接到服務器,所以我可以隨時從服務器接收消息(將會添加到coredata,然後使用NSNotification來告訴我的意見附加內容)。

我的問題是這樣的:當我選擇一行時,我在堆棧上推另一個視圖,以便我可以看到我的消息。我想知道如何做到這一點,原因如下:

•我可以將我的NSSet消息傳遞給我的關係,對嗎?然而,正如我可以收到一條消息,同時看着那個視圖,我如何刷新傳遞給視圖的NSSet?

•我也可以在該視圖中使用另一個fetchedresultController,但在這種情況下,我會無故將我的前一個視圖中的所有消息預加載?我可以告訴coredata不要在我以前的視圖中加載它們嗎?

我希望這已經夠清楚了。我有點絕望,我知道那個網站上有一些專家。如果您需要任何其他信息,請告知我,我會盡快提供更多信息。

+0

按照慣例,實體名稱以大寫字母開頭,屬性名稱和關係名稱以小寫字母開頭。你應該在你的代碼和你的文章中遵循這個慣例,因爲它使其他人更容易閱讀和理解。 – TechZen 2011-04-18 18:39:41

回答

5

如果我理解正確的是如何Coredata 的作品,因爲我有一個關係,聯繫到我的談話 每 消息將被加載以及對不對?

在查詢關係之前,Message對象本身不會被加載。在此之前,他們至多隻是故障(鬼佔位符)。

通常,您只需傳遞用戶在第一個表中選擇的Conversation對象。在第二個tableview控制器中,你會問Conversation對象的相關消息。然後你會把它們排列成一個數組來顯示。

但是,如果你有其中messages關係不斷用新Message對象更新情況,那麼你可能想使用一個NSFetchedResultsController(FRC)只是因爲你得到新的更新Message對象的所有自動通知。

要做到這一點,你會通過Conversation對象上面,然後用它在斷言對於FRC像這樣:

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

然後實現FRC委託方法如常。

當然,你可以從上下文註冊第二個tableview控制器爲NSManagedObjectContextObjectsDidChangeNotification,並直接處理所有這些,但對於新手FRC可能更容易。

+0

坦克你非常清楚的答案。 我沒有意識到coredata自動進行延遲加載。那很完美 ! 非常感謝。我希望這會正常工作(不要懷疑你說的是什麼,但是我的實施!) 再次,謝謝 – Pierre 2011-04-18 18:32:23

+0

感謝這:) – 2012-08-18 17:00:35

相關問題