将您的 managedObjectContext 设置为初始 viewController OS X 的方法
Ways to get your managedObjectContext to the initial viewController OS X
这就是我目前的做法,但我想知道 Apple 是否建议这样做。我读过一些关于这个的辩论。
let appDelegate : AppDelegate = NSApplication.sharedApplication().delegate as AppDelegate
if let moc = appDelegate.managedObjectContext {
// do stuff here
}
所以这只是从 AppDelegate
到第一个 viewController
。从那里我猜测使用 segues
是绕过 managedObjectContext
?
的方法
使用上面的代码非常烦人,因为我将其输入到 viewController
中需要 MOC
的每个方法中。当我有一个带有 return
语句的函数并且我所有使用 MOC
的代码都在 if statement
的 body 内时,这更令人讨厌,因为这会产生错误说明is/may 没有 return
。有没有更好的方法来做到这一点,比如让它更全球化?
编辑:
我的 ViewController.swift 文件有这个 header:
import Cocoa
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
并包含一个 Table 视图
我的 AppDelegate.swift 文件有:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
Apple 示例代码在应用程序委托中存储和创建核心数据堆栈,但这并不意味着它是正确的。事实上,这是完全错误的。应用程序委托不应拥有数据存储。 Apple 做到了,而且大多数人都效仿,因为它很方便。你真的应该有一个自定义 class 拥有并创建核心数据堆栈。
这个自定义 class 需要在某个地方实例化,它可以在应用程序委托中然后传递给您的根视图控制器,或者它可以在根视图控制器本身中。此自定义 class 也可以是单例(因为您不想要它的多个实例)。
每个视图控制器都应该有一个 public 属性 用于由其创建者设置的 MOC(segue 代码的一部分)。通过这种方式,每个控制器都不会去获取 MOC,而是注入了 MOC 依赖项。这有助于保持关系清晰并有助于单元测试。您也不需要 let
来检查您是否获得了 MOC - 如果它不存在,那就是开发问题(如果无法创建它,您永远不应该创建/推送视图控制器。 ..).
这就是我目前的做法,但我想知道 Apple 是否建议这样做。我读过一些关于这个的辩论。
let appDelegate : AppDelegate = NSApplication.sharedApplication().delegate as AppDelegate
if let moc = appDelegate.managedObjectContext {
// do stuff here
}
所以这只是从 AppDelegate
到第一个 viewController
。从那里我猜测使用 segues
是绕过 managedObjectContext
?
使用上面的代码非常烦人,因为我将其输入到 viewController
中需要 MOC
的每个方法中。当我有一个带有 return
语句的函数并且我所有使用 MOC
的代码都在 if statement
的 body 内时,这更令人讨厌,因为这会产生错误说明is/may 没有 return
。有没有更好的方法来做到这一点,比如让它更全球化?
编辑:
我的 ViewController.swift 文件有这个 header:
import Cocoa
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
并包含一个 Table 视图
我的 AppDelegate.swift 文件有:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
Apple 示例代码在应用程序委托中存储和创建核心数据堆栈,但这并不意味着它是正确的。事实上,这是完全错误的。应用程序委托不应拥有数据存储。 Apple 做到了,而且大多数人都效仿,因为它很方便。你真的应该有一个自定义 class 拥有并创建核心数据堆栈。
这个自定义 class 需要在某个地方实例化,它可以在应用程序委托中然后传递给您的根视图控制器,或者它可以在根视图控制器本身中。此自定义 class 也可以是单例(因为您不想要它的多个实例)。
每个视图控制器都应该有一个 public 属性 用于由其创建者设置的 MOC(segue 代码的一部分)。通过这种方式,每个控制器都不会去获取 MOC,而是注入了 MOC 依赖项。这有助于保持关系清晰并有助于单元测试。您也不需要 let
来检查您是否获得了 MOC - 如果它不存在,那就是开发问题(如果无法创建它,您永远不应该创建/推送视图控制器。 ..).