今天扩展在iOS 8.1.2上启动之前崩溃

时间:2015-01-26 15:31:08

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

我一直在制作今天的扩展程序,从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)'

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

Tom Harrington在帖子中说:

  

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

     

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

     

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

我的扩展程序在其构建设置中包含NotificationCenter.framework,但我怀疑我的问题可能在某种程度上类似。

任何人都面临类似的问题?知道怎么解决吗?

4 个答案:

答案 0 :(得分:42)

如果在&#34; Info.plist&#34;中使用NSExtensionPrincipalClass,也会发生此错误。为了定义一个不存在ViewController名称的基类(而不是使用故事板)。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

最终我尝试从目标中删除NotificationCenter.framework并将其放回原位,清理项目,现在又重新开始工作了。我猜这个框架毕竟没有正确链接,虽然我可以用xcode在我的目标上看到它。另外,我无法弄清楚它为什么会起作用,然后停止了8.1.2的到来。

答案 3 :(得分:0)

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

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