2016-09-15 117 views
2

我更新了swift 3,发现很多错误。这就是其中之一:使用FBSDKApplicationDelegate时对成员'下标'的歧义引用

暧昧参考成员“下标”

以下行

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迅速2.

回答

3

的类型options字典已经从[String: AnyObject]变更为[UIApplicationOpenURLOptionsKey : Any],这意味着你应该UIApplicationOpenURLOptionsKey标a String,而不是像你现在这样。

试试这个:

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

您的代码仅在上面的版本iOs 9.0中可用。如果我仍然使用8.4版,该怎么办?谢谢 – stevengbu

+0

根据Apple的文档,这个版本的方法仅适用于iOS9 +。我不知道什么是最好的行动是支持iOS8和iOS9,因为这种方法似乎不符合这两个.. https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623112 - 应用 – donnywals

+0

是的,也许我需要遵循苹果规则。谢谢 – stevengbu

1

这是处理与前和iOS 9之后的版本与SWIFT 3和Xcode的8

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]) 

} 

多么希望它能帮助!

相关问题