如何引用Today View Widget中的AppDelegate?

所以我有一个今日视图小部件build立了我的主要应用程序,我试图访问一些存储的数据(通过CoreData的)。 但是,当我创build懒惰variables来处理我的一个实体,它无法编译。 我明白它抛出的错误,但我不知道如何处理/修复它。

lazy var managedObjectContext : NSManagedObjectContext? = { let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate if let managedObjectContext = appDelegate.managedObjectContext { return managedObjectContext } else { return nil } }() 

这个错误在第二行被抛出……“作为AppDelegate”,它是“未声明的AppDelegate的使用”。 我猜这是有道理的,因为AppDelegate是在基本的应用程序文件夹中,而不是在小部件的文件夹。 但是,我不知道如何replace或修复这个代码,以便编译和运行。 有任何想法吗?

你不能。 扩展名与您的主应用程序包(您的应用程序委托所在的位置)完全是分开的二进制文件。您必须创build一个共享库,以供您的主应用程序包和扩展使用,或者执行大量复制粘贴代码(前者是优选的)。

从开发者指南 :

您可以创build一个embedded式框架来共享您的应用扩展程序和其包含的应用程序之间 例如,如果您在照片编辑扩展中以及在其包含的应用程序中开发图像filter,请将filter的代码放在框架中,并将框架embedded到两个目标中。

如果你不想要,你不必创build一个正式的可链接库。 只要确保您正在编写的库不引用不适用于扩展的API。

确保您的embedded式框架不包含应用程序扩展无法使用的API,如某些API对应用程序扩展无法使用所述。 如果您有一个自定义框架包含这样的API,您可以从您的包含应用程序安全地链接到它,但不能与应用程序包含的扩展共享该代码。 App Store拒绝任何链接到这种框架的应用程序扩展,否则使用不可用的API。