Objective-C предупреждение Переопределение метода для назначенного инициализатора супер-класса '-init' не найдено

Я очищаю предупреждения в приложении, и дважды получаю это предупреждение

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

для этой строки кода

@implementation AFNetworkReachabilityManager

и эта строка

@implementation AFURLConnectionOperation

Я новичок в objective-c и искал это предупреждение и просто не понял решения

Мой вопрос в том, как я могу избавиться от этих предупреждений?

Ответ 1

Из Форумы Apple

Правила для назначенных инициализаторов сложны, и я собираюсь подбросить вас в документы для общего случая. Любопытно, что я нашел лучшее объяснение этого раздела "Инициализация" языка Swift Programming, потому что те же понятия применимы как к Swift, так и к Objective-C. В вашем конкретном случае вы должны переопределить -init и не выполнить его во время выполнения. Вы также должны пометить его в своем заголовке NS_UNAVAILABLE, который позволит компилятору поймать это в типичном случае. Вышеизложенное относится к тому, что ваш класс не может работать без модели, и поэтому вы не можете разумно реализовать - любым полезным способом. Если бы вы могли, вы должны. Например, если вы создавали свой собственный строковый объект, для него было бы целесообразно реализовать -init, вызвав super, а затем инициализируя строку пустой строкой.

В ваших файлах .h:

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

@end  

В .m файлах:

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

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

@end