2016-08-16 13 views
27

Po zainstalowaniu Xcode 8 Beta 6, Dostaję ostrzeżenie mówiąc: metodaaplikacji (_: didFinishLaunchingWithOptions :)”prawie pasuje opcjonalny wymóg

Instance 'aplikacji (_: didFinishLaunchingWithOptions :)' prawie pasuje opcjonalne wymaganie "(_: didFinishLaunchingWithOptions :)" protokołu "UIApplicationDelegate"

w mojej aplikacji Delegat.

Istnieją 2 zasugerował fixits uciszyć ostrzeżenie:

  1. Oznacz metodę jako prywatne
  2. Dodaj @nonobjc metody

Doing albo wycisza ostrzeżenie. Ale dlaczego to trzeba zrobić?

Odpowiedz

49

To ostrzeżenie jest ze względu na fakt, że parametr z didFinishLaunchingWithOptions:application(_:didFinishLaunchingWithOptions:) Metoda delegatów jest teraz połączona z Swift jako [UIApplicationLaunchOptionsKey: Any]?, a nie z [NSObject : AnyObject]?.

Dlatego musisz zaktualizować swoją realizację, aby odzwierciedlić tę zmianę:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // ... 
} 

Należy zauważyć, że żadna z sugerowanych poprawek Xcode jest rzeczywiście rozwiązać problem, oni ukryć tylko implementację od application(_:didFinishLaunchingWithOptions:) z Objective- C - co oznacza, że ​​nigdy nie zostanie wywołany.

+2

Dzięki! Powinienem najpierw sprawdzić referencję API ... – doraemon

+1

Tak, ponieważ nowa implementacja nie otrzymuje parametru opcji, jak również nie zwraca wartości Boolean z najnowszego zestawu SDK – pedrouan

+1

Poprawiona sugerowana tutaj opcja 'UIApplicationLaunchOptionsKey' nie powoduje zignorowania ostrzeżenia w moim projekcie w Xcode 8 beta 6, więc obecnie muszę żyć z tym ostrzeżeniem. – CodePlumber

3

Pierwszy parametr przekazany do funkcji nie ma już nazwy zewnętrznej. Jest to naprawdę drobny szczegół, ponieważ nie wywołuje się tej metody bezpośrednio i jest to szybka naprawa, aby kompilator był szczęśliwy. Możesz ręcznie zmienić nazwę pierwszego parametru na _ lub po prostu pozwolić, aby Xcode sobie z tym poradził.

func application(_ application: UIApplication, 
didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool 

lub nowej składni

func application(_ application:UIApplication, 
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool // or remove = nil and try 

można pobrać najnowszą dokumentację od apple oraz link próbki w here

+1

Właśnie zdałem sobie sprawę, że kiedy opublikowałem pytanie, podkreślenie się nie pojawiło, więc je zredagowałem. Podpis metody zawsze miał _. To ostrzeżenie pojawiło się tylko na Xcode 8 beta 6. Nie było go w poprzednich wersjach beta Xcode 8 – doraemon

+0

Tak, te ostrzeżenia czasami bardziej mylą niż pomagają – pedrouan

Powiązane problemy