2013-10-22 59 views
0

是否可以直接將數據庫/實體加載到CoreData中?該應用程序依賴於數據,初始數據負載超過100,000個項目。在iPhone 4上完成插入需要大約15分鐘,這是一個令人不快的時間。將數據庫直接加載到CoreData中

有什麼辦法我可以:

  1. 加載預填充實體到CoreData
  2. 加載預填充的數據庫(所有實體)到CoreData
  3. 東西沿着這些線路 使數據的插入速度明顯加快

謝謝。

回答

1

使用CoreData創建數據庫並將其添加到項目包中,然後在第一次加載時,將數據庫從數據包複製到文件系統,以便它可寫,然後從那裏打開它。您可能希望將數據庫標記爲不共享給iCloud,具體取決於您的需要。

1

是的,這是可能的。對此的「正常」方法是預先構建數據庫,將其作爲資源包含在內,檢查啓動時是否在文檔文件夾中包含數據庫,如果沒有,則從包中複製它。

我通常運行我的代碼在模擬器上構建數據庫,然後將其從sim文件夾複製並添加到我的項目資源中。

+0

那簡單嗎?我喜歡。因此,您可以構建數據庫,將核心數據數據庫作爲資源複製,然後替換應用程序在第一次加載時生成的數據庫?或者在它生成它自己之前將它複製過來。 –

+0

是的。在調用任何核心數據例程之前執行此操作,在打開核心數據時給應用程序一個既成事實。 –

+1

盧克 - 後者。檢查它是否存在於doc目錄中,並且如果不從該包中複製預構建版本。 – Bladebunny

0

通過應用程序包複製預先創建的Core Data生成的sqlite文件是個好主意,儘管我覺得它有點麻煩。如果你有一個靜態數據存儲區和一個動態數據存儲區 - 這在大多數情況下可以像這樣複製靜態數據。

但是,備案15分鐘是荒謬的。我可以保證你可以把它縮短到幾秒鐘。

我已經能夠在不到30秒的時間內在第一代iPad上完成500K插入。最重要的優化技術是:

  • 禁用撤消管理器,使用帶有@autoreleasepool後臺線程
  • 與完全正確的批量大小(實驗確定)定期儲蓄。
相關問題