所以我有一个基于我的主应用程序的Today View小部件,我正在尝试访问一些存储的数据(通过CoreData)。但是当我创建lazy变量来处理我的一个实体时,它无法编译。我理解它引发的错误,但我不确定如何处理/修复它。
lazy var managedObjectContext : NSManagedObjectContext? = {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
if let managedObjectContext = appDelegate.managedObjectContext {
return managedObjectContext
}
else {
return nil
}
}()
错误在第2行被抛出......“作为AppDelegate”,它是“未申请使用AppDelegate”。我认为这是有道理的,因为AppDelegate位于基本应用程序文件夹中,而不是在小部件的文件夹中。但我不知道如何替换或修复这个代码将编译和运行。有什么想法吗?
答案 0 :(得分:2)
你做不到。扩展名是完全由您的主应用程序包捆绑的二进制文件,这是您的应用程序委托所在的位置。您必须创建一个将由主应用程序包和扩展程序使用的共享库,或者执行大量的复制粘贴代码(以前的方法是首选)。
您可以创建一个嵌入式框架,以在您的应用之间共享代码 扩展及其包含应用程序。例如,如果您开发图像 过滤器,用于照片编辑扩展程序及其中 包含app,将过滤器的代码放在框架中并嵌入 两个目标中的框架。
如果您不想要,则无需创建正式的可链接库。只需确保您编写的库不引用不可用于扩展的API。
确保您的嵌入式框架不包含不可用的API 应用扩展程序,如Some APIs Are Unavailable to App Extensions中所述。 如果您有一个包含此类API的自定义框架,则可以 从您的应用程序安全链接到它但无法共享该代码 使用应用程序包含的扩展名。 App Store拒绝任何应用程序 链接到此类框架或以其他方式使用的扩展 不可用的API。