【发布时间】:2016-01-08 16:35:23
【问题描述】:
我正在开发一个处理自定义 URL 方案的应用程序的 Swift 版本。
您需要实现的方法在 iOS 9 中发生了变化。
Objective-C 版本的方法在 Objective-C 应用程序中运行良好:
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<NSString *,
id> *)options
{
//my code here
}
但是,在我的 Swift 应用程序中,等效功能:
func application(application: UIApplication,
openURL: NSURL,
options: [String : AnyObject]) -> Bool
{
//My code here
}
当我在 iOS 9 设备上运行应用程序时从未调用过。当我在 Safari 中调用我的自定义 URL 方案时,我收到提示“在“应用程序名称”中打开?”,当我点击打开时,它会将我的应用程序带回前台,但没有调用上述方法。
我的方法签名中一定有一些细微的不匹配,但我看不到。我究竟做错了什么?我尝试了各种变体,但都不起作用。
【问题讨论】:
-
您的自定义 URL 方案是否具有 http 或 https 协议?
-
来自 Apple Developer:如果您的实现从 application:willFinishLaunchingWithOptions: 和 application:didFinishLaunchingWithOptions: 方法返回 false,则不会调用此方法。也许你错过了这个? developer.apple.com/library/ios/documentation/UIKit/Reference/…:
-
@ZellB,感谢您的建议,但事实并非如此。我的
didFinishLaunchingWithOptions:正在返回 true -
@bat,我正在实现一个自定义 URL 协议,例如
myurl://parameters。它不是使用 HTTP 或 HTTPS 协议,而是我自己的自定义协议。 -
@DuncanC 让 Xcode 自动完成,看起来对我来说是错误的。正确的是
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
标签: ios swift url-scheme openurl