簡體   English   中英

Core Data iPhone App的設計模式

[英]Design pattern for Core Data iPhone App

我正在構建一個將使用核心數據模型的應用程序。 我在Objective C上很新,我的常用設計模式並不適用於Core Data和Objective C,至少我似乎無法找到確認它們的例子。

我已經瀏覽了Apple Developer示例和intertubes上的不同來源。

似乎要利用Core Data我需要將managedObjectContext傳遞給我的每個viewControllers,讓viewController實現NSFetchedResultsControllerDelegate,然后實現每個方法進行獲取並隨后實現

NSFetchedResultsChangeInsert

NSFetchedResultsChangeDelete NSFetchedResultsChangeMove NSFetchedResultsChangeUpdate

這在每個viewController中增加了大約100行代碼,並且它是我反復編寫的相同代碼的90%。 另外,我必須傳遞一切並跟蹤它的內存占用。

在其他語言中,我將構建一個包含幾個類的單例模型,這些類包含根據請求維護和提供數據的方法,可從任何地方獲得。 我似乎無法在Objective C中采用這種方法。如果我在哪里構建一個靜態類,它接受了一個managedObjectContext並返回了我需要的東西,我仍然需要將managedObjectContext傳遞給每個視圖,它不會是異步,就像我實現在結果准備就緒時調用的委托方法一樣。

我希望這是有道理的,並且有人可以確認沒有其他合理的方法來做到這一點,或者幫助指出我的方向以良好的方式包裝它。

謝謝:)

核心數據並不像您描述的那么復雜。

通常,iPhone應用程序具有“主”托管對象上下文,該上下文通常由應用程序委托擁有。 只要您可以獲得應用程序委托(提示: [[UIApplication sharedApplication] delegate] ),您就可以訪問托管對象上下文。 我喜歡定義一個靜態全局變量來保存對我的app委托的引用,以使生活更輕松。

NSFetchedResultsController實例和UITableView實例之間通常存在一對一的對應關系。 除了填充表視圖外,您需要一個NSFetchedResultsController是非常罕見的。 如果您有許多類似的視圖(例如,一個標簽欄可以讓您以不同的方式查看iPod應用程序的相同數據),那么您應該創建一個配置NSFetchedResultsController的單個基類並派生您的特定視圖控制器從那以后。

現在,當您創建視圖控制器以編輯對象時,通常最好在單獨的托管對象上下文中執行此操作。 如果用戶取消,您只需丟棄上下文,更改就會消失。 同樣,您實際上並不需要NSFetchedResultsController ,因為這些視圖僅涉及單個對象。

完成編輯后,您save:托管對象上下文。 管理其他托管對象上下文的對象應實現NSFetchedResultsControllerDelegate方法以使表視圖保持同步。 同樣,這可以在基類中實現,因此您可以為相關的視圖控制器概括此功能。

你絕對必須使用CoreData模型,還是使用NSCoder(NSArchiver,NSKeyedArchiver等)工作? 我發現CoreData對大多數應用程序來說都是過度殺傷力。

另外,你能澄清為什么你不能采用單身人士的方法嗎? 我在許多應用程序中使用了單件工廠而沒有任何問題。 定義在共享(單例)實例上運行的類級方法相當容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM