如何从Today View Widget引用AppDelegate?

时间:2015-01-28 03:49:20

标签: ios swift core-data

所以我有一个基于我的主应用程序的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位于基本应用程序文件夹中,而不是在小部件的文件夹中。但我不知道如何替换或修复这个代码将编译和运行。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你做不到。扩展名是完全由您的主应用程序包捆绑的二进制文件,这是您的应用程序委托所在的位置。您必须创建一个将由主应用程序包和扩展程序使用的共享库,或者执行大量的复制粘贴代码(以前的方法是首选)。

来自developer guides

  

您可以创建一个嵌入式框架,以在您的应用之间共享代码   扩展及其包含应用程序。例如,如果您开发图像   过滤器,用于照片编辑扩展程序及其中   包含app,将过滤器的代码放在框架中并嵌入   两个目标中的框架。

如果您不想要,则无需创建正式的可链接库。只需确保您编写的库不引用不可用于扩展的API。

  

确保您的嵌入式框架不包含不可用的API   应用扩展程序,如Some APIs Are Unavailable to App Extensions中所述。   如果您有一个包含此类API的自定义框架,则可以   从您的应用程序安全链接到它但无法共享该代码   使用应用程序包含的扩展名。 App Store拒绝任何应用程序   链接到此类框架或以其他方式使用的扩展   不可用的API。