2013-02-21 45 views
0

我在啓動應用程序時遇到了數據導入問題。 第一次啓動時,我創建了很多核心數據對象(差不多有400個對象)。 問題是,當我在模擬器中嘗試應用程序時,似乎都是正確的,但在設備上,我必須等待很長時間,因爲我的輸入,也許應用程序崩潰(不是每次)。第一次啓動應用程序時的核心數據導入

有人曾經有過這個問題嗎? 我應該嘗試使輸入腳本更高效嗎? 是否存在使用Core Data進行數據輸入的一些良好實踐?

非常感謝!

+1

一些代碼會有所幫助。 – Rakesh 2013-02-21 14:59:50

+0

你在主線程上運行所有這些嗎? – 2013-02-21 15:27:16

+0

我在第一次啓動時創建並插入了大約1000個對象,這需要不到2秒。但是這很大程度上取決於對象的大小以及保存上下文的頻率。優化數據模型有很大幫助。使用具有很多關係的高度規範化的DB模型很可能在ios中表現非常糟糕。 – 2013-02-21 15:29:59

回答

-1

我通常會將包含初始數據的sqlite文件捆綁到應用程序中。在應用程序啓動時,檢查數據庫文件是否存在,如果沒有將它從軟件包複製到文檔目錄或任何地方。

以增加應用程序大小爲代價的更快的啓動時間。

+0

我不認爲這是一個好策略。如果Apple更改其內部核心數據<-> SQLite交換如何?商店中的應用程序將打破,直到您注意到並獲得更新。 – occulus 2013-02-21 15:51:46

+0

核心數據的目的不是直接在SQLite文件中操作數據。核心數據是一個ORM,它在SQLite數據庫和Objective-C中的對象之間建立中間關係。 – Vinestro 2013-02-21 16:09:06

+0

如果蘋果對其.sqlite格式進行了不兼容的更改,則每個人的應用都會中斷。蘋果不太可能這樣做。 – 2013-02-21 16:14:24

0

我通常使用與Gopal相同的技術。除了文件大小之外,我遇到的唯一不足之處在於您在發貨數據中發現錯誤。如果發生這種情況並且需要修復數據,則需要確定用戶數據中是否存在錯誤數據並進行更新。我在啓動時通過檢查應用程序的NSUserDefaults中的didUpdateToVersionX值,查詢用戶數據存儲以查找錯誤記錄,更新相關對象,保存商店以及設置首選標誌來處理此問題。

您的種子數據是用戶可編輯的還是隻讀的?如果它是隻讀的,則應該能夠擁有獨立的只讀和用戶可寫存儲(前者位於應用程序包中,後者位於Documents目錄中)。針對另一個問題,Marcus Zarra做了一個nice writeup of this technique。根據您的設置,它可能會涉及一些額外的工作。我想把上述應用切換到使用這種技術,但我從來沒有機會。

+0

我的數據必須是隻讀的。該應用僅用於閱讀信息 – Vinestro 2013-02-21 15:59:58

相關問題