2016-09-17 87 views
0

有一件事我不完全理解與CoreData(我找不到一個很好的答案我的問題):你怎麼在一個應用程序中使用CoreData多個UIViewcontrollers使用核心數據(多個ViewControllers)

在我玩弄核心數據在多個控制器的時刻,我在每個VC鍵入此:

let app = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context = app.managedObjectContext 
    let entity = NSEntityDescription.entityForName("EntityName", inManagedObjectContext: context)! 
    let entityName = EntityName(entity: entity, insertIntoManagedObjectContext: context) 

但我不認爲這是與CoreData在多個控制器上工作的最佳實踐(側面的問題:這是否會影響我的應用的性能?)。什麼是最喜歡的方式?

  1. 我是否在每個viewcontroller中創建一個託管對象上下文? (很多複製粘貼,像我現在這樣做)
  2. 我是否創建一個創建CoreData的單例? 我讀的地方,這不是首選方式
  3. 難道我通過管理對象範圍內使用 塞格斯(或應用程序委託的功能'*didFinishLaunchingWithOptions*'設置一個公共情境變量)下一個控制器?
  4. 還有別的嗎?

在此先感謝!

回答

-1

你要做的是避免代碼重複。因此,只需將代碼放入一個函數中並將其放置在某個位置即可。這可能是對UIViewControlerAppDelegate分機或只是一個輔助功能

這是怎麼上UIViewController延長會是什麼樣子:

extension UIViewController 
{ 
    func doCoreDataWork() 
    { 
     let app = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context = app.managedObjectContext 
     let entity = NSEntityDescription.entityForName("EntityName", inManagedObjectContext: context)! 
     let entityName = EntityName(entity: entity, insertIntoManagedObjectContext: context) 
    } 
} 

然後從任何視圖控制器打電話doCoreDataWork()

不,它沒有任何關係的表現

0

3->設置一個公共主隊列MOC是一個很好的做法。因爲主隊列是一個串行隊列。

1->使用主隊列MOC僅用於爲每次編輯提取和創建子MOC是一種很好的做法。因爲編輯可獲取的MOC可能會導致衝突。

2->您可以嘗試創建一個用於獲取共享主隊列MOC的單例實例,並定義一些創建用於編輯的子上下文的函數。

4->但實際上沒有抽象情況的最佳實踐。

我這麼認爲。