2009-01-14 56 views
1

我一直在做iPhone過去5個月左右的開發,並且一直在使用Gus Mueller的FMDB進行數據庫交互。我的下一個項目將同時擁有Mac和iPhone應用程序,並且他們將在它們之間共享數據,但最終,iPhone將主要是一個查看器應用程序,並具有一些較小的編輯功能。Mac/iPhone混合應用程序的數據存儲

我的問題是:核心數據會讓Mac在我的生活中變得足夠簡單,那麼使用Mac上的Core Data和iPhone上的FMDB來寫兩次數據模型是值得的?或者我應該只爲兩者使用FMDB,以便我可以在Mac和iPhone上重複使用相同的代碼?

我已經在Core Data上挖了一點,但並不多(大多隻是Hillegas書中的例子),所以任何有利於Core Data的具體示例都將不勝感激。爲了記錄,我非常喜歡FMDB,我只是想知道Core Data是否會讓我的生活在這種情況下變得更容易。

編輯: 我瞭解FMDB和Core Data之間的核心區別,我主要是想知道Core Data提供的「免費」是否值得我的數據模型編碼兩次。

回答

13

主要區別在於FMDB是SQLite的Obj-C包裝器,而CoreData是碰巧在SQLite中存儲數據的對象模型(不是編輯數據庫而是編輯對象)。這意味着它有更高的層次並提供更多的抽象,但如果你知道你在用數據庫做什麼,那麼你應該沒問題。就我個人而言,我會在共享代碼方面犯錯,因爲它會減少錯誤,簡化開發並加快發佈速度。

1

我同意馬丁。如果你是只有寫一個桌面應用程序,我會說與核心數據。既然你在做這兩件事情,試圖在存儲模型之間進行轉換時出現問題的可能性實際上是指向桌面和手機使用FMDB。

1

代碼共享是好的,但取決於模型和模型控制器類的相似程度,您可能不想完全折扣核心數據。例如,除了對象持久化之外,您還可以「免費」獲得非常好的撤消/重做支持。你可能想要做一個快速的原型來判斷你可能最終在兩個應用程序之間重寫的代碼。

4

您可能還想調查OmniGroup中的OmniDataObjects框架。它在OS X和iPhone OS上的SQLite之上實現了CoreData功能的一個子集。我相信他們在OmniFocus的OS X和iPhone版本中都使用它。

1

核心數據的優點是它是一個持久存在於SQLite(或二進制或XML或自定義)數據存儲的對象圖管理框架。因此,它管理對象之間的單個對象實例和雙向(包括對多)關係的錯誤(包括根據這些關係傳播或拒絕刪除的幾個選項),以及驗證對單個對象屬性和關係的約束(包括必需/可選,基數,範圍等)。在OS X 10.5中,它還包含用於在模型模式之間半自動遷移數據存儲的工具。

不利的一面是,它在iPhone上不可用。如果FMDB滿足您的需求,您可能更容易管理單個代碼庫而不是兩個代碼庫。

如果您的桌面應用程序需要Leopard,最後一個選擇是使用FMDB編寫NSAtomicStore子類。一個NSAtomicStore必須讀取整個存儲裏,這樣你會寬鬆一些的SQLite的桌面上的好處的客戶,但由於數據將在iPhone共享,我猜你不會有那麼多的數據無論如何。通過這種方法,您可以在客戶端使用Core Data,在iPhone上使用通用數據模型/數據存儲的FMDB。

1

我不知道你的項目涉及的是什麼類型的數據,但是如果它以任何方式處理人的記錄,並且記錄的數量相當小,那麼你也可以使用內置的地址簿(ABAddressBook類)作爲數據庫。

它讓你添加所獨有的應用程式資源(這是不是在不使用它們的其他應用程序可見),你會得到iPhone和Mac之間同步absoutely是免費的。

3

因此,現在可能已經完全解決了這個問題,但是對於後代,我想提一下,在iPhone OS 3.0上,核心數據在iPhone上是,如果您打算在Mac應用程序中使用它,你可以分享你的iPhone應用程序的許多工作。