我有一个'DOInstance'类,后来我继承了它。这是它的声明:
@interface DOInstance : NSObject {
}
- (DOInstance *) initWithSynckey:(NSString *)_synckey;
@end
然后我有一个DOInstance的子类:
@interface Workflow_Workitem_Header_1px: DOInstance {
}
//- (Workflow_Workitem_Header_1px *) initWithSynckey:(NSString *)_synckey;
@end
我继续在实现文件中实现它:
- (Workflow_Workitem_Header_1px *) initWithSynckey:(NSString *)_synckey {
[super initWithSynckey:_synckey];
//..
//..
return self;
}
现在,如果我在子类声明中没有声明initWithSynckey :(上面的注释声明),我会在实现中收到警告:“警告:从不同的Objective-C类型初始化”。如果我宣布它,这个警告消失了。好。
继续前进:
我稍后对我的子类进行实例化:
Workflow_Workitem_Header_1px *instance;
instance = [[Workflow_Workitem_Header_1px alloc] initWithSynckey:@"xxxx"];
现在,这给了我同样的警告(不管我是否在我的子类中声明了相应的initWithSynckey:选择器。即,警告:从不同的Objective-C类型初始化“。
我做错了什么?
答案 0 :(得分:2)
名为init的方法应该具有返回类型(id),而不是类的类型。查看NSString.h和NSArray.h(以及其他类)的示例。这可能是造成问题的原因。
答案 1 :(得分:0)
在这种情况下,重写方法必须返回与超类声明相同的类型。
DOInstance定义了这个:
- (DOInstance *) initWithSynckey:(NSString *)_synckey;
所以Workflow_Workitem_Header_1px必须如下所示:
@interface Workflow_Workitem_Header_1px: DOInstance {
}
- (DOInstance *) initWithSynckey:(NSString *)_synckey;
@end
任何时候你收到警告“警告:从不同的Objective-C类型初始化”你正在做的事情违反你的输入:更改方法签名等。