编写没有故事板的iOS 8共享扩展
有没有人知道有没有一种好方法可以在不使用模板附带的编写没有故事板的iOS 8共享扩展,ios,iphone,swift,ios8,ios-app-extension,Ios,Iphone,Swift,Ios8,Ios App Extension,有没有人知道有没有一种好方法可以在不使用模板附带的mainterface.storyboard的情况下编写iOS 8共享扩展 当我删除文件或从Info.plist中删除NSExtensionMainStoryboard时,扩展将停止工作(点击共享窗格中的按钮时不会发生任何事情)。我们尝试将NSExtensionMainStoryboard替换为NSExtensionPrincipalClass,但同样无效 有什么想法吗?想出来了 事实证明,Swift中存在一个奇怪的模块命名问题,因此您可以通过向
mainterface.storyboard
的情况下编写iOS 8共享扩展
当我删除文件或从Info.plist
中删除NSExtensionMainStoryboard
时,扩展将停止工作(点击共享窗格中的按钮时不会发生任何事情)。我们尝试将NSExtensionMainStoryboard
替换为NSExtensionPrincipalClass
,但同样无效
有什么想法吗?想出来了
事实证明,Swift中存在一个奇怪的模块命名问题,因此您可以通过向类添加@objc
名称来修复它:
@objc(PrincipalClassName)
class PrincipalClassName: UIViewController {
...
然后将
NSExtensionPrincipalClass
键设置为PrincipalClassName
无法添加注释,但它不再是NSPrincipalClass,而是NSExtensionPrincipalClass从这些答案中找到了答案,并将其组合在一起
对于Objective-C,您必须在应用程序扩展的info.plist
中添加以下内容:
NSExtensionPrincipalClass
并确保它位于NSExtension
Dict下
所以完整的答案应该是这样的,在我的例子中,ActionViewController
是应用程序扩展viewController
在Swift中,正确的方法是将模块名称包含在
NSExtensionPrincipalClass
中,而不是@objc
黑客攻击,即
NSExtensionPrincipalClass
$(产品\模块\名称)。ActionViewController
(以其他方式记录错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: ...)'
希望将来能帮助遇到此错误的人。)嘿!谢谢,您可以指定找到此文件的来源吗?使用Swift时,您需要在Info.plist的
NSExtensionPrincipalClass
键的值字段中指定'NotificationContent.NotificationContentViewController'。在这里,NotificationContent
是模块名,NotificationContentViewController
是唯一的视图控制器类。我同意这是一个比@objc指令更好的解决方案,也更清晰。为我工作,为你荣耀!我一直在寻找我的代码崩溃的原因,但我自己却无法找到原因