我正在使用以下签名创建init
方法:
- (id)initWithDictionary:(NSDictionary *)dictionary AndLocation:(CLLocation *)location
但是收到此警告消息:
Instance method '-initWithDictionary:AndLocation:' not found (return type defaults to 'id')
但是,如果我在init
方法中使用断点,我肯定会这样做:
Fwiw,我已经重新启动了xcode,删除了派生数据,Build Clean等等。
此方法签名不在.h文件中,但我非常确定那里不应存在init
方法(例如Objective-C: Should init methods be declared in .h?)。
答案 0 :(得分:1)
您需要将签名添加到.h文件中。
您误解了链接中的注释 - 如果您继承- (id) init
,则不需要添加特定的NSObject
方法,因为已经定义了init。
将- (instancetype) initWithDictionary:(NSDictionary *)dictionary AndLocation:(CLLocation *)location;
添加到标题
答案 1 :(得分:1)
您打算在实现文件之外使用的任何方法都必须在头文件中声明,否则您将收到警告(或错误)。这包括init...
方法。
如果你真的不想在头文件中使用init...
方法(虽然我不确定你为什么不这样做),你可以创建一个静态构造函数方法反而反映它。
@interface YourClass : YourSuperclass
+ (instancetype)createWithDictionary:(NSDictionary *)dictionary location:(CLLocation *)location;
@end
然后在您的实现文件中实现它:
@implementation YourClass
+ (instancetype)createWitDictionary:(NSDictionary *)dictionary location:(CLLocation *)location {
return [[self alloc] initWithDictionary:dictionary location:location];
// or for non-ARC:
// return [[[self alloc] initWithDictionary:dictionary location:location] autorelease];
}
@end