我一直在制作今天的扩展程序,从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-F3DBA6F34DB5)” 如果您正在进行今天的扩展,只需将该框架保留在构建设置中即可。它不应该在那里,但它确实存在。
我的扩展程序在其构建设置中包含NotificationCenter.framework,但我怀疑我的问题可能在某种程度上类似。
任何人都面临类似的问题?知道怎么解决吗?
答案 0 :(得分:42)
如果在&#34; Info.plist&#34;中使用NSExtensionPrincipalClass,也会发生此错误。为了定义一个不存在ViewController名称的基类(而不是使用故事板)。
使用Swift时,请确保在类前面加上模块名称(通常是目标名称),如&#34; Module.MyViewController&#34;。
答案 1 :(得分:0)
刚遇到同样的问题。对我来说,它是键盘目标的“常规设置”中的“主界面”属性。它是空白的,我将它设置为我的故事板文件,现在它就像一个魅力。
答案 2 :(得分:0)
最终我尝试从目标中删除NotificationCenter.framework并将其放回原位,清理项目,现在又重新开始工作了。我猜这个框架毕竟没有正确链接,虽然我可以用xcode在我的目标上看到它。另外,我无法弄清楚它为什么会起作用,然后停止了8.1.2的到来。
答案 3 :(得分:0)
我通过向Swift类添加@objc
属性来解决此问题。
@objc(NotificationViewController)
class NotificationViewController: UIViewController, UNNotificationContentExtension {
...
}