2014-08-27 34 views
4

我有一个iOS 8的Swift应用程序,它有一个应用程序组件,一个扩展组件和一个包含大量共享资源的框架 - 共享视图控制器,共享资源等。在框架的一个点,我想打电话给用于框架+应用程序+扩展的统一openURL

UIApplication.sharedApplication().openURL(someURL) 

但是,如果我这样做,当“只允许应用程序扩展API”被选中,它错误,因为UIApplication.sharedApplication()是扩展不可用。如果我取消选中该框,我会收到一个警告,说明在扩展中包含框架可能不安全,并且我担心在提交时间时可能会导致拒绝。

如果这个代码是在扩展只用,我会使用类似:

extensionContext.openURL(someURL, completionHandler: nil) 

...但是,这并不在独立应用程序的工作,只有在扩展。

修改我的代码以确保UIApplication.sharedApplication()。openURL()行永远不会被扩展调用,并且extensionContext.openURL()行从不会被应用程序调用,但这并不“清除错误 - 仅在扩展API框架中存在UIApplication.sharedApplication()会导致错误。

因此,在我开始研究黑客之前,有没有一种干净的解决方案可以让我调用openURL并采取正确的操作,而不会导致编译错误?

在此先感谢!

回答

2

声明一个全局的Optional闭包变量来打开共享框架中的URL。

public openURL: (NSURL->())? = nil 

然后将其设置在应用程序委托的application:didFinishLaunching:...像这样:

openURL = { UIApplication.sharedApplication().openURL($0) } 

然后就可以调用openURL从任何地方像这样:

openURL?(NSURL(string: "http://stackoverflow.com/")!) 

该声明将在不影响您的因为您在应用程序扩展程序中不会设置openURL

相关问题