Objective-C警告方法覆盖未找到超类'-init'的指定初始值设定项

use*_*331 12 objective-c ios

我正在清理应用程序中的警告,我收到了两次警告

Method override for the designated initializer of the superclass '-init' not found
Run Code Online (Sandbox Code Playgroud)

对于这行代码

@implementation AFNetworkReachabilityManager
Run Code Online (Sandbox Code Playgroud)

这条线

@implementation AFURLConnectionOperation
Run Code Online (Sandbox Code Playgroud)

我对objective-c相当新,并且用Google搜索了这个警告,只是不明白解决方案

我的问题是如何摆脱这些警告?

Boi*_*ime 23

来自Apple论坛

指定初始化程序的规则很复杂,我会将您反馈给一般案例的文档.奇怪的是,我发现最好的解释是Swift编程语言的"初始化"部分,因为相同的概念适用于Swift和Objective-C.在您的特定情况下,您应该覆盖-init并使其在运行时失败.您还应该使用NS_UNAVAILABLE在标头中标记它,这将允许编译器在典型情况下捕获它.以上情况适用,因为您的类不可能在没有模型的情况下运行,因此您无法以任何有用的方式合理地实现-init.如果可以,你应该.例如,如果您要创建自己的字符串对象,

在您的.h文件中:

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

@end  
Run Code Online (Sandbox Code Playgroud)

.m文件中:

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

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

@end  
Run Code Online (Sandbox Code Playgroud)