繁体   English   中英

如何从Today View Widget引用AppDelegate?

[英]How to reference the AppDelegate from a Today View Widget?

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

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

来自开发人员指南

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

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

确保您的嵌入式框架不包含应用程序扩展不可用的API,如某些API不适用于App Extensions中所述 如果您有一个包含此类API的自定义框架,您可以安全地从包含的应用程序链接到它,但不能与应用程序包含的扩展共享该代码。 App Store拒绝链接到此类框架或以其他方式使用不可用API的任何应用程序扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM