2013-05-16 29 views
0

我一直在iOS數據持久化的iOS應用中使用sqlite數據庫,現在我正在嘗試確定是否值得學習Core Data。我一直在閱讀一些關於其優點和缺點的文檔和文章,但是我發現決定何時使用Core Data或Sqlite並不那麼清楚(例如,Core Data VS Sqlite or FMDB…?)。iOS中的數據模型持久性考慮因素

我需要一些指導,知道我是否應該學習和使用的核心數據,或使用SQLite是足以讓我:

  1. 已經有sqlite的腳本,是有可能建立從數據的核心數據模型sqlite數據庫? Afaik,(糾正我,如果我錯了)你可以使用sqlite來堅持核心數據對象,但它可以反向操作嗎?
  2. 它是否適用於處理多個用戶數據的核心數據?我需要考慮到不同的用戶可以在同一臺設備上登錄應用程序。

在此先感謝

+0

我有兩個主要產品,一個使用核心數據,另一個使用FMDB。我非常喜歡使用FMDB。核心數據的東西似乎是奧術而不是直言不諱,對我來說真的很痛苦。使用謂詞,而不是簡單的查詢也是一種痛苦。 FMDB只是起作用,而且一直很愉快。它還處理多個登錄人員。 – HalR

回答

1

核心數據是一個奇妙的框架,但同時它通常使用SQLite在幕後,你不應該覺得核心數據作爲數據庫引擎,而是更像一個對象持久化框架。如果你有很多SQL代碼(尤其是批量更新等),那麼可能不值得轉換爲Core Data。但是Core Data有很多優秀的性能優化,iCloud集成等等,所以值得仔細研究。

如果你想要核心數據的背景,我會建議蘋果視頻Working with Core Data

如果你只是想簡化你的SQLite代碼,請檢查FMDB


在回答你的問題:

已經有sqlite的腳本,是有可能建立在SQLite數據庫數據的核心數據模型? Afaik,(糾正我,如果我錯了)你可以使用sqlite來堅持核心數據對象,但它可以反向操作嗎?

您通常必須重新定義您的核心數據模型。它不能僅僅打開你現有的SQLite數據庫(儘管一旦你定義了你的模型,你可以編寫代碼將數據從SQLite傳輸到核心數據)。

它是否適用於處理多個用戶數據的核心數據?我需要考慮到不同的用戶可以在同一臺設備上登錄應用程序。

是的,你可以。但是你必須定義你的模型來手動處理它(例如,添加一個用戶標識符字段並相應地手動編寫謂詞/篩選結果,就像你在SQLite中所做的那樣)。

1

AppsDev,

只有你可以判斷是否使用核心數據或SQLite的堅持。正如你在上面引用了我的答案,你知道我的觀點 - 使用核心數據。讓我把它放在你的上下文中。

大贏家是Core Data附帶的抽象系列,以及它們如何映射到Objective-C對象模型。這是你必須從SQLite應用程序手動處理的東西。 (你可以這樣做嗎?是的,但是,你很可能會根據你的SQL模式製作一個自定義的界面,它的可重用性很小,這是一個長期的問題)。謂詞與SQL查詢,這是世界觀上的差異。也就是說,由於謂詞可以應用於NSSets和NSArrays,它們具有超出Core Data所要求的效用。知道如何使用謂詞將是有價值的。例如,您可以輕鬆地執行查詢以獲取記錄集合,然後使用謂詞對它們進行過濾,例如查找表視圖。

每個人都準備好接受特定模式時需要選擇。毫不奇怪,SQL專家喜歡堅持他們所知道的。動態的語言愛好者會有不同的選擇。對於iOS/OS X來說,擁抱動態語言路徑對於開發者來說將會增加您的價值。

因此,我的建議仍然是:使用核心數據。

Andrew

+0

有趣的評論,謝謝! – AppsDev