2011-12-24 145 views
2

我正在更新本地核心數據驅動的應用程序以支持iCloud。我預期的一個挑戰是圍繞着我所謂的「股票對象」 - 即應用程序首次啓動時提供的種子數據,99%的用戶將自定義。核心數據,iCloud和庫存對象

股票對象

Item A 
Item B 

定製對象

Tomatoes 
Potatoes 

然後,如果用戶啓動應用程序首次在新設備上,我覺得默認的行爲將是股票對象的重新創建將與iCloud持久存儲(項目A,項目B,西紅柿,土豆)中的定製對象合併,導致混亂y用戶體驗。

一種方法可能是在首次啓動時同步檢查iCloud數據,如果存在,則不要創建庫存對象。但是,用戶在第一次啓動時可能會脫機,然後在第二次啓動時,本地庫存對象與iCloud自定義對象發生相同的不良合併。

是否有方法將邏輯添加到iCloud合併中,以便來自雲(番茄和土豆)的自定義對象的到達可以指示我在刪除本地庫存對象(項目A和項目B)之前將其刪除?

謝謝!

回答

0

我不知道這是否是最好的方法,但是這是我在做什麼:

  1. 當用戶選擇啓用iCloud的,我檢查自己的iCloud目錄是空的。
  2. 如果是這樣,沒問題;我將數據庫遷移到啓用了iCloud選項的新本地存儲區,以便所有現有數據移動到雲中。
  3. 如果不是,我檢查本地數據庫是否爲空。如果是這樣,我會清除所有的庫存對象,並從雲端獲取所有內容。如果不是,我告訴用戶目前該應用程序無法將本地數據庫與iCloud數據庫合併,並要求他們刪除其數據(或重新安裝),從而避開此問題。
0

爲什麼不通過不提供種子對象來避免這種情況?首次啓動時,只需通過界面提示用戶輸入自己的對象。問問,如果她之前使用過該應用程序,並解釋說可能需要付費才能重新創建對象,然後等待從iCloud進行同步。

+0

嗯,我不確定我想用這個預付費麻煩用戶。另一個問題是,我需要以特殊方式處理完整的實體,其中包含完整的庫存對象。想象一下與Food實體有關的庫存FoodType對象(「肉」,「蔬菜」,「甜點」等)。即使它們的所有屬性都匹配,但如果它們是在不同設備的不同時間創建的,Core Data似乎將它們視爲不同。所以當合併發生時,突然間我有兩種「肉類」食物類型,一些食物與一個物體相連,另一些與另一個物體相連。 – ed94133 2011-12-24 21:42:09

+0

我有類似的情況。我提供了有用的種子對象 - 他們中的大多數從來沒有變過。一個簡單的想法是添加一個布爾屬性'validated',並從那裏取出邏輯。然後,您可以檢查背景中的等同性和「合併」,而無需用戶注意。 – Mundi 2011-12-24 23:39:12