【问题标题】:How to inherit object and initialize : Objective-C如何继承对象和初始化:Objective-C
【发布时间】:2021-07-30 08:10:23
【问题描述】:

我创建了一个名为 Model 的对象,它有一些方法。我想将 Model 导入 Mediator 以在那里使用它的方法。但是当我尝试在Mediator.m 中执行此操作时,我不断收到错误消息: Initializer element is not a compile-time constant & 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

【问题讨论】:

    标签: objective-c oop methods


    【解决方案1】:

    首先,您的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 等),但这会让您开始。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2013-07-06
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多