2015-09-23 13 views
11

jestem oczyszczania ostrzeżenia w aplikacji i mam to ostrzeżenie dwukrotnieObjective-C przesłanianie Metoda ostrzeżenie dla wyznaczonego inicjatora superklasy „-init” Nie znaleziono

Method override for the designated initializer of the superclass '-init' not found 

dla tej linii kodu

@implementation AFNetworkReachabilityManager 

i ta linia

@implementation AFURLConnectionOperation 

Jestem całkiem nowy, Objective-C i google to ostrzeżenie i ju Nie rozumiem rozwiązań

Moje pytanie brzmi: jak mogę pozbyć się tych ostrzeżeń?

Odpowiedz

20

Od Apple forums

Zasady wyznaczonych incjalizatory są złożone i mam zamiar odbić do docs w ogólnym przypadku. Co ciekawe, najlepszym wyjaśnieniem tego jest sekcja "Inicjalizacja" w Swift Programming Language, ponieważ te same pojęcia dotyczą zarówno Swift, jak i Objective-C. W twoim konkretnym przypadku powinieneś zastąpić -init i sprawić, by to się nie udało podczas uruchamiania. Powinieneś również oznaczyć go w nagłówku NS_UNAVAILABLE, co pozwoli kompilatorowi złapać to w typowym przypadku. Powyższe dotyczy, ponieważ twoja klasa nie może działać bez Modelu, a zatem nie możesz rozsądnie wdrożyć -init w jakikolwiek użyteczny sposób. Jeśli możesz, powinieneś. Na przykład, jeśli tworzysz swój własny obiekt typu string, ma to sens, aby implementował -init, wywołując super, a następnie inicjując ciąg znaków do pustego łańcucha.

W swoim .h plików:

@interface MyClass : NSObject 
- (instancetype)init NS_UNAVAILABLE; 

@end 

W .m pliki:

@interface MyClass() 
- (instancetype)init NS_DESIGNATED_INITIALIZER; 
@end 

@implementation MyClass 
- (instancetype)init { @throw nil; } 

@end 
+0

@throw nil teraz wydaje się być nie-nie; Używam teraz tego: –

Powiązane problemy