Swift 2 application:openURL:options: 的方法签名是什么样的?
What does the Swift 2 method signature for application:openURL:options: look like?
我正在开发处理自定义 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 方案时,我得到提示 'Open in "appname"?',当我点击打开时,它会将我的应用程序带回前台,但不会调用上述方法。
我的方法签名中一定有一些细微的不匹配,但我看不到。我究竟做错了什么?我尝试了各种变体,none 其中有效。
我的问题似乎是由损坏的项目引起的。我创建了一个新项目文件并在新项目中复制了相同的代码, application:openURL:options:
被正确调用。
这是一个很奇怪的问题。如果我删除故障项目中的 "AppDelegate.swift" 并将其替换为 AppDelegate.m/AppDelegate.h,则 Objective-C 版本中会正确调用 application:openURL:options:
。
我怀疑 Xcode 中存在间歇性错误,导致某些项目在 Swift 中的应用程序委托时无法调用您的应用程序委托的 application:openURL:options:
。
如果您遇到同样的问题,您可能需要创建一个新项目,设置您的 info.plist,然后复制 application:openURL:options:
方法以查看新项目是否调用您的方法。
函数签名(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
}
另外记得将 "scheme"(应用程序名称)添加到您的 info.plist 文件中。从 Safari 在 phone 上像这样调用
scheme://host/path?query
我正在开发处理自定义 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 方案时,我得到提示 'Open in "appname"?',当我点击打开时,它会将我的应用程序带回前台,但不会调用上述方法。
我的方法签名中一定有一些细微的不匹配,但我看不到。我究竟做错了什么?我尝试了各种变体,none 其中有效。
我的问题似乎是由损坏的项目引起的。我创建了一个新项目文件并在新项目中复制了相同的代码, application:openURL:options:
被正确调用。
这是一个很奇怪的问题。如果我删除故障项目中的 "AppDelegate.swift" 并将其替换为 AppDelegate.m/AppDelegate.h,则 Objective-C 版本中会正确调用 application:openURL:options:
。
我怀疑 Xcode 中存在间歇性错误,导致某些项目在 Swift 中的应用程序委托时无法调用您的应用程序委托的 application:openURL:options:
。
如果您遇到同样的问题,您可能需要创建一个新项目,设置您的 info.plist,然后复制 application:openURL:options:
方法以查看新项目是否调用您的方法。
函数签名(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
}
另外记得将 "scheme"(应用程序名称)添加到您的 info.plist 文件中。从 Safari 在 phone 上像这样调用
scheme://host/path?query