UIApplicationDelegate在Swift应用程序中没有名为managedObjectContext的成员

时间:2014-08-15 19:43:02

标签: ios core-data swift uiapplicationdelegate

我想在我的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。

2 个答案:

答案 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