2016-01-08 39 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瀏覽器撥打電話這樣

方案上://主機/路徑查詢

相關問題