2016-01-08 21 views
2

我正在处理自定义URL方案的应用程序的Swift版本。什么是应用程序的Swift 2方法签名:openURL:options:看起来像什么?

你需要的方法,在iOS的9

方法的Objective-C的版本能正常工作工具改变了Objective-C的应用:

- (BOOL)application:(UIApplication *)app 
      openURL:(NSURL *)url 
      options:(NSDictionary<NSString *, 
        id> *)options 
{ 
    //my code here 
} 

然而,在我的斯威夫特应用程序,等效功能:

func application(application: UIApplication, 
    openURL: NSURL, 
    options: [String : AnyObject]) -> Bool 
{ 
    //My code here 
} 

当我在iOS 9设备上运行应用程序时从不会调用它。当我在Safari中调用自定义URL方案时,系统会提示'Open in'appname“?',当我点击打开时,它会将我的应用程序返回到前台,但上述方法不会被调用。

我的方法签名中必定存在一些细微的不匹配,但我看不到它。我究竟做错了什么?我尝试了各种变化,其中没有任何工作。

+0

是你的自定义URL方案具有HTTP或HTTPS协议? –

+0

来自Apple Developer:如果您的实现从应用程序:willFinishLaunchingWithOptions:和application:didFinishLaunchingWithOptions:methods中返回false,则不调用此方法。也许你错过了这个? https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html?hl=ar#//apple_ref/occ/intfm/UIApplicationDelegate/application:openURL:options: –

+0

@ ZellB,感谢您的建议,但那不是。我的'didFinishLaunchingWithOptions:'返回true –

回答

1

我的问题似乎是由一个损坏的项目造成的红鲱鱼。我创建了一个新的项目文件,并将相同的代码复制到新项目中,application:openURL:options:被正确调用。

这是一个很奇怪的问题。如果我在发生故障的项目中删除“AppDelegate.swift”,并将其替换为AppDelegate.m/AppDelegate.h,则在Objective-C版本中正确调用application:openURL:options:

我怀疑Xcode中存在间歇性错误,导致某些项目无法在应用程序委托给Swift时调用应用程序代理的application:openURL:options:

如果您遇到同样的问题,您可能需要创建一个新项目,设置您的info.plist,然后复制application:openURL:options:方法以查看新项目是否调用您的方法。

0

函数签名(iOS9)是:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 

如果你想测试工作,只需复制到你的应用程序代理这样的:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 
{ 
     print("Scheme: \(url.scheme)") 
     print("Host: \(url.host)") 
     print("Path: \(url.path)") 
     print("Query String: \(url.query)") 

     // DEBUG: get all key-value pairs in options also 
     for (key, value) in options { 
      print("Key: \(key), Value: \(value)") 
     } 
     return true 
} 

还记得添加的“计划” (应用程序名称)到您的info.plist文件。从Safari浏览器拨打电话这样

方案上://主机/路径查询

相关问题