2016-09-15 11 views
2

私はswift 3を更新しました。 、私はなぜ私はこれを取得していますかわからないFBSDKApplicationDelegateを使用する場合、メンバー 'subscript'へのあいまいな参照

メンバーの添字 "次の行

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { 
     FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as? String, annotation: options["UIApplicationOpenURLOptionsAnnotationKey"] as? String) 

     return true 
    } 

については

へのあいまいな参照誰が知っている:これはそのうちの一つであります?

それは、以前のバージョンではうまく機能7.3.1 SWIFT 2. options辞書の種類が[UIApplicationOpenURLOptionsKey : Any][String: AnyObject]から変更されている、これはあなたが今やっているようにあなたがStringの代わりにUIApplicationOpenURLOptionsKeyで添字べきであることを意味

答えて

3

これを試してみてください:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    guard let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, 
     let annotation = options[UIApplicationOpenURLOptionsKey.annotation] else { 
      return false 
    } 

    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, 
                   sourceApplication: sourceApplication, 
                   annotation: annotation) 

} 

このコードは、optionsから探しているキーを抽出し、FBSDKApplicationDelegateに渡します。オプション辞書の値にアクセスするにはUIApplicationOpenURLOptionsKey.sourceApplicationUIApplicationOpenURLOptionsKey.annotationの使用に注意してください。

+0

あなたのコードは上記のバージョン10.0でのみ利用できます。私がまだバージョン8.4を使用している場合はどうなりますか?ありがとう – stevengbu

+0

Appleのドキュメントによると、このバージョンのメソッドはiOS9 +のみです。私は、この方法が両方とも互換性がないように見えるので、iOS8とiOS9の両方をサポートするのが最善の策であるかどうかはわかりません。https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623112 -application – donnywals

+0

はい、おそらく私はリンゴのルールに従う必要があります。ありがとう – stevengbu

1

これは

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 


    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

@available(iOS 9.0, *) 
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 


    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 

} 

迅速3とiOSの9の前と後のバージョンでの対処方法ですとXcode 8は、それが役に立てば幸い!

関連する問題