如何从“今日视图”小组件引用应用程序代表



所以我有一个基于我的主应用程序构建的"今日视图"小部件,我正在尝试访问一些存储的数据(通过CoreData)。但是当我创建惰性变量来处理我的一个实体时,它无法编译。我理解它抛出的错误,但我不确定如何处理/修复它。

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

该错误在第 2 行的 ..."As AppDelegate" 处抛出,表示它是"未声明的 AppDelegate 使用"。我想这是有道理的,因为AppDelegate位于基本应用程序文件夹中,而不是在小部件的文件夹中。但是我不知道如何替换或修复它,以便代码能够编译和运行。有什么想法吗?

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

来自开发人员指南:

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

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

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

最新更新