2013-04-12 72 views
0

我有一些數據需要從服務器(後端)加載。例如,讓我們說我有一個用戶和事件的實體。它們之間的關係是多對多的(用戶可以參加很多活動,活動可以有很多參與者)。所有數據都遠程存儲在後端,並在本地存儲在Core Data中。當我從後端下載數據時,我將它轉換爲NSManagedObjects並將其存儲在NSManagedObjectContext中。一切都很簡單,但...在覈心數據中存儲關係中不存在的對象的數量

當我下載一個我想知道的事件列表,這個事件有多少與會者。但是我不能在同一個請求中下載用戶列表,因爲這完全是矯枉過正。我需要的是下載一個用戶唯一ID的列表,這樣我就可以擁有兩件事:參加者總數和下載具體用戶詳細數據的方法(通過唯一ID)。或者還有另一個例子:我需要知道與會者的總數並下載一組有限的數據,因此我可以在CoreData中創建一些實體,但不是全部。

所以主要問題是我該如何將這些信息存儲在我的CoreData中?這意味着我需要知道,對於某些實體來說,關係中有一些實際上並不存在於CoreData中的相關實體,但我知道它們中應該有多少實體。我想到的第一件事是在我的事件實體中有一個叫做usersCount的屬性,但是這似乎有點骯髒。這種情況的最佳做法是什麼?

如果問題不夠清楚,請發表評論,以便我可以添加一些更具體的細節。

+0

您是否考慮在覈心數據中創建關係實體?這樣用戶和事件可以有點獨立,每個與關係實體有多對多的關係。 –

回答

1

當你下載一個事件與相應的用戶ID列表,那麼你可以創建 的Event對象以及相關的User對象,但您填寫只有「用戶id」 在用戶對象的屬性。

稍後,當您下載完整的用戶信息時,將更新現有(不完整)對象 或創建新的用戶對象。 「核心數據編程指南」 中的Implementing Find-or-Create Efficiently描述了一種可能有用的模式。

所以我們的想法是首先創建不完整信息的核心數據對象,然後使用詳細信息更新 對象。優點是您可立即建立所有關係,例如即使用戶信息 尚未完成,也可以對相關用戶進行計數。

+0

謝謝。但有一些缺點 - 我將不得不使用userId以外的所有屬性爲可選。聽起來不太好。似乎我不得不選擇兩個邪惡中的一小部分。 – DemoniacDeath

+0

@DemoniacDeath:這是正確的。但我認爲可選屬性沒有缺點。我更願意直接檢查程序邏輯中條目的有效性。強制屬性意味着保存上下文可能會失敗。 - 但你的里程可能會有所不同! –

1

有一個屬性來存儲計數沒有什麼骯髒的,特別是如果這些實體通過單獨的請求檢索和分頁。