我想在我的Swift iOS应用程序中使用Core Data,但是如何从任何ViewControllers中调用Core Data的managedObjectContext?
假设我想调用在Objective-C中经常使用的这个方法:
self.managedObjectContext = ((AppDelegate *) [UIApplication sharedApplication].delegate).managedObjectContext;
但是,当我在Swift文件中编写以下代码时,出现错误:UIApplicationDelegate does not have a member called managedObjectContext
。
var appDelegate = UIApplication.sharedApplication().delegate
println(appDelegate.managedObjectContext)
为什么会出错?因为我在创建应用程序时检查了Core Data,所以模板自动在AppDelegate.swift
文件中定义了managedObjectContext变量。
那么缺少什么?我使用Xcode 6 beta 5。
答案 0 :(得分:5)
您需要将应用委托投射到项目的应用委托类型。
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context = appDelegate.managedObjectContext
答案 1 :(得分:2)
建议的方法是将NSManagedObjectContext
传递给第一个视图控制器,然后传递给后续视图控制器。这就是Apple Xcode(objective-c)模板的功能。实现UIApplicationDelegate
的对象创建NSManagedObjectContext
及其依赖项,然后将该对象设置为第一个视图控制器上的managedObjectContext属性。
您收到此编译错误的原因是UIApplicationDelegate
协议未定义属性managedObjectContext
。当您尝试访问作为应用程序代理的对象时:
UIApplication.sharedApplication().delegate
返回的对象仅用于实现UIApplicationDelegate
协议描述的方法。这不包括managedObjectContext
。