2016-09-15 2 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 вместо 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.sourceApplication и UIApplicationOpenURLOptionsKey.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

Это как сделка с с версиями до и после прошивки 9 с быстрыми 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]) 

} 

Надеются, что это помогает!

Смежные вопросы