2012-03-13 113 views
0

我正在爲iPhone(iOS 5)的應用程序工作。我必須做的是使用我從服務器獲得的二進制數據創建一張地圖。有些問題確實工作得非常好:iOS 5數據存儲:核心數據,SQL或其他選項?

  • 我可以連接到服務器,發送請求並接收二進制數據
  • 我可以interprete這個數據,從它創建對象(多邊形和路徑)和內吸引他們一個視圖

但現在它涉及到困難的部分。我創建的地圖應該是可縮放和可移動的。所以我必須發送新的請求到服務器並重新繪製地圖。這也很好,但我現在收到的數據需要存儲,因爲我不應該從服務器兩次請求相同的數據(例如,如果我縮小然後返回)。

最後,這裏是我的問題:什麼是最好的方式來存儲我的數據?到現在爲止,我想到了使用CoreData或SQLite。還有更好的解決方案嗎?我應該保存哪些數據 - 二進制數據還是我創建的對象?

我希望這是可以理解的,你能幫助我與我的問題中的至少一個...

回答

1

核心數據是唯一的出路。核心數據不是存儲系統,是一個對象圖和持久性框架,女巫可以使用SQlite存儲數據。

如果使用核心數據,則可以重構項目並將managedObjects子類用作模型。

看看Core Data Programming GuideThe differences between Core Data and a Database

編輯:

Core Data Performance

核心數據能夠處理大量數據的豐富和複雜的對象圖管理 框架。 SQLite 商店可以通過數十億行/表/列擴展到TB級數據庫。除非您的實體本身具有非常大的屬性(儘管參見「大數據對象(BLOB)」)或較大的屬性數量,10,000個對象被認爲是相當小的數據集大小。

+0

感謝您的超級快速回答。所以你的意思是我應該保留我的對象並使用CoreData訪問它們。我能幫你嗎?這仍然是大量數據的最佳選擇嗎? – Bautzi89 2012-03-13 14:32:38

+0

我已編輯我的帖子。如果您必須保存斑點,您可以將它們保存到文檔目錄,並在數據庫中只保存它的路徑。 – 2012-03-13 15:26:09

+0

再次感謝您的幫助。現在我有一點要從頭開始。 – Bautzi89 2012-03-14 08:26:50

1

這實際上取決於數據對象的大小以及如何訪問它們。如果你的對象很小,你可以將它們存儲在覈心數據中。但是,如果您的地圖數據來自一堆URL的圖像,我會使用Core Data將映射存儲到地圖圖像URL並使用NSURLConnection來管理對象的緩存。

我推薦閱讀Apple Core Data Programming Guide Large Data Objects (BLOBs),它討論了對象的大小和數量。一些摘錄如下:

「小」,「適度」和「大」的確切定義是流暢的,取決於應用程序的用法。一個寬鬆的經驗法則是,大小爲千字節大小的對象大小適中,大小大小爲兆字節大小。

對於小到中等大小的BLOB(和CLOB),應該爲數據創建一個單獨的實體並創建一對一的關係來代替該屬性。

但是,如果您能夠將BLOBs作爲資源存儲在文件系統中並維護對這些資源的鏈接(如URL或路徑),則更好。然後您可以根據需要加載BLOB。

+0

謝謝你的迴應。我沒有收到來自服務器的圖像數據,但是包含具有經度和緯度的點的對象。此外,我還爲每個對象獲取渲染規則,所以我知道如何繪製它。你能否定義你認爲是「小」的對象 – Bautzi89 2012-03-14 07:48:24

+0

用對象大小信息更新了答案。 – Eric 2012-03-14 18:01:25