2015-12-11 34 views
0

Simperium的問題:simperium:sqlite數據庫恢復到Xcode模擬器(Xcode 7.1.1)。新記錄同步。舊記錄不

寫得很差的XC單元測試會從simperium用戶帳戶(我的)擦除大部分數據沒問題。我將sqlite文件的一天備份移到了iPhone 5(iOS 9.1)模擬器中,並從相同的Documents目錄中刪除了現在無用的sqlite文件。

我執行了一個乾淨的(SHIFT-COMMAND-K),並啓動了模擬器。我現在丟失的所有數據現在都出現在應用模擬器中。大。

但是恢復的核心數據記錄沒有被同步到相應的Simperium桶。當Simperium DID成功響應創建,更新和刪除操作時同步新記錄時感到迷惑。

然後我刪除了Simperium.com上的整個數據集。同樣的結果。新記錄同步沒有問題,舊記錄沒有。

是否有刪除舊的sqlite文件時刪除的重要元數據。如果是這樣,我怎樣才能讓舊記錄重新同步?

回答

1

發生了什麼是:應該拿起那些'新的舊實體'的方法正在被繞過,因爲它們都已經有了兩個,一個是Key + GhostData

這個場景通常應該自動恢復,並且允許那些實體以某種方式得到更新(這樣lib將會把它們接收並與後端同步)。

強制重新上傳最簡單的方法是:

  • 在您的應用程序,添加一個(暫時+輔助方法)被執行 Simperium後進行初始化(因此,在覈心數據堆棧已連線),但在調用authenticate方法之前。

  • 遍歷所有在桶中的實體,並設置爲nil兩者的simperiumKeyghostData值。

  • 運行你的應用程序只有一次

  • 殺死這個輔助方法(否則很可能造成重複條目!)。

(未經測試),但這應該做的伎倆!

+0

我會給你一個鏡頭。謝謝。這可能需要一段時間才能驗證,因爲我還沒有深入到simperium-ios代碼庫。 –

+0

沒問題!如果有的話,請隨時在官方的github存儲庫上打開一個問題。 –

+0

我結束了在備份數據庫上運行裸機sqlite命令以將ZSIMPERIUMKEY和ZGHOSTDATA設置爲null。例如:「UPDATE [mydb] SET ZSIMPERIUMKEY = NULL」。我爲每個實體/表重複了這一點。然後,我將清理完畢的備份數據庫移動到Simulator Documents文件夾中,並刪除舊的Model.sqlite文件。然後運行應用程序。一切都很好地同步了。感謝那!當我手動刪除Simperium儀表板中的所有用戶數據時,我感到很驚訝,因爲同步不會對先前的同步記錄起作用。但是,也許關於在線/離線同步的一些事情會讓這很難。 –