【问题标题】:Today Extension Crashes before launching on iOS 8.1.2Today Extension 在 iOS 8.1.2 上启动前崩溃
【发布时间】:2015-03-25 01:15:00
【问题描述】:

我一直在制作一个 Today 扩展程序,它可以从 Feed 中下载文章并显示最新的文章。 整个事情在 iOS 8 上运行良好,仍然在 iOS 8.1 上运行,然后是 iOS 8.1.2,我们开始抱怨今天的扩展不再工作。 我尝试在 iOS 8.1.2 设备上调试,甚至在扩展程序启动之前,它就因以下错误而崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <__NSConcreteUUID 0x174027280> 5AFB07AB-5DCD-46FE-8D07-44DE0F3789F2)'

我已经阅读了这篇关于开发 Today 扩展时经常发生的错误的帖子:http://www.atomicbird.com/blog/ios-app-extension-tip

汤姆·哈灵顿在他的帖子中说:

在 iOS 8(和其他最新版本)中,在 Xcode 的构建设置中启用模块意味着您无需明确列出要使用的所有框架。它们会被自动找到。

但今天的扩展使用的 NotificationCenter.framework 并非如此。如果您从构建设置中删除它,您将不会收到任何构建警告或错误。但是当你尝试加载扩展时,你会从 libextension.dylib 中得到一个异常并且你的扩展不会加载。异常消息没有启发性:

2014-08-16 12:06:53.793 TodayTestExtension[41313:6111763] * 终止 应用程序由于未捕获的异常 'NSInvalidArgumentException',原因:'* setObjectForKey: 对象不能为 nil (key: <__nsconcreteuuid> ED3B42F8-66CD-4CB0-BCD5-F3DBA​​6F34DB5)' 如果您正在执行今天的扩展,只需将该框架保留在构建设置中即可。它不应该存在,但它确实存在。

我的扩展在其构建设置中确实包含 NotificationCenter.framework,但我怀疑我的问题在某些方面可能类似。

有人遇到过类似的问题吗?知道如何解决吗?

【问题讨论】:

  • 哇,真令人沮丧。它看起来完全一样,但这是我所知道的唯一会导致这个问题的东西。
  • 这些投诉是来自“现场”用户还是来自运行您的应用程序测试版本的人?首先,这将是一个 8.1.2 错误,您无能为力。其次,它可能是一个可以修复的 Xcode 问题。

标签: ios objective-c ios8-today-widget today-extension


【解决方案1】:

如果您在“Info.plist”中使用 NSExtensionPrincipalClass 以使用不存在的 ViewController 的名称定义基类(而不是使用情节提要),也会发生此错误。

使用 Swift 时,请确保在类前面加上模块名称(通常是目标名称),例如“Module.MyViewController”。

【讨论】:

  • 太棒了,成功了!然后我将其更改为$(PRODUCT_NAME).,以获得额外的灵活性。
  • 你救了我的命!
  • 此解决方案适用于 any 扩展类型。而“使用 Swift 时”部分是重要的。不要忘记那个模块名称。
  • 因为我更改了我的项目名称,但 info.plist 参数 NSExtensionPrincipalClass 也是旧项目名称。
【解决方案2】:

最终,我尝试从目标中删除 NotificationCenter.framework 并将其放回原处,清理了项目,现在它又可以正常工作了。我猜这个框架毕竟没有正确链接,尽管我可以用 xcode 在我的目标上看到它。另外,我不知道为什么它确实有效,然后随着 8.1.2 的到来而停止工作。

【讨论】:

    【解决方案3】:

    我通过将@objc 属性添加到 Swift 类来解决此问题。

    @objc(NotificationViewController)
    class NotificationViewController: UIViewController, UNNotificationContentExtension {
    ...
    }
    

    【讨论】:

      【解决方案4】:

      刚刚遇到同样的问题。对我来说,它是键盘目标的“常规设置”中的“主界面”属性。它是空白的,我将它设置为我的故事板文件,现在它就像一个魅力。

      【讨论】:

        猜你喜欢
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多