【问题标题】:How to reference the AppDelegate from a Today View Widget?如何从 Today View Widget 中引用 AppDelegate?
【发布时间】:2015-01-28 03:49:19
【问题描述】:

所以我有一个基于我的主应用程序构建的 Today View 小部件,并且我正在尝试访问一些存储的数据(通过 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 在基本应用程序文件夹中,而不是在小部件的文件夹中。但是我不知道如何替换或修复它,以便代码能够编译和运行。有什么想法吗?

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

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

    来自developer guides

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多