如何继承对象并初始化:Objective-C



我创建了一个名为Model的对象,它有一些方法。我想将Model导入到Mediator中,以便在那里使用它的方法。但当我尝试在Mediator.m中执行此操作时,我会不断出现错误:CCD_ 2&No known class method for selector 'add'

我对这些错误的含义感到困惑。研究它们并没有让事情变得更清楚。

型号.h

@interface Model : NSObject
@property (nonatomic) NSInteger tally;
-(int) add;
@end

型号.m

#import "Model.h"
@interface Model ()

@end

@implementation Model
- (instancetype)init
{
self = [super init];
if (self) {
self.tally = 0;
}
return self;
}
- (int)add {
self.tally = self.tally + 1;
return self.tally;
}

@end

Mediator.h

@interface MediatorController : NSObject

- (int)addOne;
@end

Mediator.m

@interface MediatorController ()

@end
@implementation MediatorController
Model *model = [[Model alloc] init];      <<<<<<< "Initializer element is not a compile-time constant"
- (int)addOne {
return [Model add];        <<<<<< "No known class method for selector 'add"
}

@end

首先,您需要MediatorController上的model属性

@interface MediatorController : NSObject
@property (strong, nonatomic) Model* model; //<-- Here
- (int)addOne;
- (int)subtractOne;
- (void)setValue:(int)value;
- (int)value;
@end

然后,您需要一个init方法——现在,您正试图在实现的顶层编写model =,但这不起作用——它需要在方法内部。

最后,不要在Model(即类(上调用add,而是在self.model(即类的实例(上调用它。

@implementation MediatorController
- (instancetype)init { //< -- Here
if (self = [super init]) {
self.model = [Model new];
}
return self;
}
- (int)addOne {
return [self.model add];
}
@end

您最终会收到一些编译器警告,因为您还没有实现其余的方法(subtractOnesetValue等(,但这会让您开始。

最新更新