正确的方法来定义NSManagedObjectContext?

时间:2015-05-15 11:22:32

标签: macos swift core-data

我的NSManagedObjectContext应用程序早些时候,我曾用这种方式定义class MyViewController: NSViewController { lazy var moc: NSManagedObjectContext? = { let app = NSApplication.sharedApplication().delegate as! AppDelegate if let moc = app.managedObjectContext { return moc } else { return nil } }() // .... }

Eartquakes

但后来我下载了名为NSManagedObjectContext的Apple示例应用程序,其中import Cocoa class CoreDataStackManager { class var sharedManager: CoreDataStackManager { struct Singleton { static let coreDataStackManager = CoreDataStackManager() } return Singleton.coreDataStackManager } // persistenStoreCoordinator etc... 就是这样:

class ApplesViewController: NSViewController {

    private lazy var managedObjectContext: NSManagedObjectContext = {
        let moc = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)

        moc.persistentStoreCoordinator = CoreDataStackManager.sharedManager.persistentStoreCoordinator

        return moc
    }()
}

在ViewController中:

SUBROUTINE test
USE mp, only: mp_bcast
integer :: B = 0
logical :: A
...
CALL mp_bcast (A, B)
END SUBROUTINE test

所以我只是想知道哪种方式是正确的方式 - 我认为这是Apple的方式:) - 这就是为什么默认情况下在AppDelegate中定义核心数据堆栈的原因?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,但最终还是可维护性。

我找到的最佳方式,以及Apple对其他项目的传统方法是:

  1. 为Core Data创建一个单独的控制器。
  2. 在AppDelegate中初始化该控制器。
  3. 使用依赖注入将该控制器传递给视图控制器。
  4. 请勿使用Singleton。虽然在项目开始时感觉很容易,但往往会让你把它画成一个角落。