使用Core Data时,我们使用AppDelegate获取managedObjectContext,如下所示:
override func viewDidLoad()
{
super.viewDidLoad()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedObjectContext = appDelegate.managedObjectContext
}
现在当我从viewDidLoad中删除这两行代码以试图将它们作为实例变量存储在ViewController上时,我收到错误。
问题是我不能使用“appDelegate”,因为它已经是一个实例变量。
我知道我可以通过简单地解决这个问题:
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
然而,我很好奇是否可以将两者都声明为实例变量。我假设这可以使用getter / setter完成,但我不太确定。
答案 0 :(得分:1)
你可以这样做:
class ViewController: UIViewController {
var appDelegate:AppDelegate?
var managedObjectContext:NSManagedObjectContext?
override func viewDidLoad() {
super.viewDidLoad()
appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate
managedObjectContext = appDelegate?.managedObjectContext
}
答案 1 :(得分:1)
我必须将appDelegate从常量更改为变量,然后使我的managedObjectContext成为一个惰性变量,以便我可以访问“self”。我还必须包含类型NSManagedObjectContext,如下所示:
var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
lazy var managedObjectContext: NSManagedObjectContext = self.appDelegate.managedObjectContext