UIApplicationDelegate 在 Swift 应用程序中没有名为 managedObjectContext 的成员
Posted
技术标签:
【中文标题】UIApplicationDelegate 在 Swift 应用程序中没有名为 managedObjectContext 的成员【英文标题】:UIApplicationDelegate does not have a member named managedObjectContext in Swift app 【发布时间】:2014-08-15 19:43:02 【问题描述】:我想在我的 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。
【问题讨论】:
因为UIApplicationDelegate
没有这个属性,所以你已经把它添加到AppDelegate
了。
【参考方案1】:
您需要将应用委托转换为您项目的应用委托类型。
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context = appDelegate.managedObjectContext
【讨论】:
【参考方案2】:推荐的方法是将NSManagedObjectContext
传递给第一个视图控制器,然后再传递给后续的视图控制器。这就是 Apple Xcode (objective-c) 模板所做的。实现UIApplicationDelegate
的对象创建NSManagedObjectContext
及其依赖项,然后将该对象设置为第一个视图控制器上的 managedObjectContext 属性。
您收到此编译错误的原因是UIApplicationDelegate
协议未定义属性managedObjectContext
。当您尝试访问作为应用程序委托的对象时:
UIApplication.sharedApplication().delegate
返回的对象只知道实现UIApplicationDelegate
协议描述的方法。这不包括managedObjectContext
。
【讨论】:
那么为什么Objective-C
的代码可以工作,而我的Swift
代码不行?或者,Swift 的正确端口是什么?
再次,建议将上下文传递到视图控制器。不从应用程序委托中获取它。这是做到这一点的正确方法。您的代码不起作用,因为 UIApplicationDelegate 协议不包含“managedObjectContext”。 UIApplication.sharedApplication().delegate 返回一个符合该协议的对象。如果该对象的实例响应其他消息,编译器不知道。以上是关于UIApplicationDelegate 在 Swift 应用程序中没有名为 managedObjectContext 的成员的主要内容,如果未能解决你的问题,请参考以下文章
如何在命令行 GHUnit 中使用 UIApplicationDelegate?
其他类中的 UIApplicationDelegate 函数
iPhone:UIApplicationDelegate 和启动图像?
什么是 Cordova 的 UIApplicationDelegate 等价物
在越狱设备上使用后台程序时未调用 UIApplicationDelegate
无法使用 [UIApplication sharedApplication]。如何在 UIApplicationDelegate 之外注册通知?