-1

更新

事实证明,我在该类的一个实例上调用了一个类方法。

我已将该行代码修复为:

double result = [CalculatorBrain runProgram:[self.brain program] usingVariableValues:[self variableValues]];

但是当我运行程序并评估该行时,我收到以下错误:

+[CalculatorBrain runProgram:usingVariableValues:]: 无法识别的选择器发送到类 0x6908

原来的

为什么我在视图的 enterPressed 内的 XCode 中收到以下错误:“CalculatorBrain”没有可见的@interface 声明选择器“runProgram:usingVariableValues:”

** CalculatorViewController.m **

#import "CalculatorViewController.h"
#import "CalculatorBrain.h"

@interface CalculatorViewController()

@property (nonatomic, strong) CalculatorBrain *brain;
@property (nonatomic, strong) NSMutableDictionary *variableValues;

@end

@implementation CalculatorViewController

@synthesize brain = _brain;
@synthesize variableValues = _variableValues;

- (CalculatorBrain *)brain {
    if (!_brain) _brain = [[CalculatorBrain alloc] init];
    return _brain;
}

- (NSMutableDictionary *)variableValues {
    if (!_variableValues) {
        _variableValues = [[NSMutableDictionary alloc] init];
    }
    return _variableValues;
}

- (IBAction)enterPressed {

    double *result = [self.brain runProgram:[self.brain program] usingVariableValues:[self variableValues]];

}

** CalculatorBrain.h **

#import <UIKit/UIKit.h>

@interface CalculatorBrain : NSObject

+ (double)runProgram:(id)program usingVariableValues:(NSDictionary *)variableValues;

@property (readonly) id program;


@end
4

2 回答 2

2

在 CalculatorBrain.h 中,您声明的是类方法而不是实例方法:

+ (double)runProgram:(id)program usingVariableValues:(NSDictionary *)variableValues;

使用-而不是+.

或者,如果您打算将其作为类方法,请这样调用它:

 double *result = [CalculatorBrain runProgram:[self.brain program] usingVariableValues:[self variableValues]];
于 2012-10-24T00:32:47.223 回答
0

如果您要添加一个类级别的方法,那么您不是在实例上调用该方法,而是在类本身上调用该方法。例如:

double *result = [self.brain runProgram:[self.brain program] usingVariableValues:[self variableValues]];

会成为:

double *result = [CalculatorBrain runProgram:[self.brain program] usingVariableValues:[self variableValues]];

我没有看到上面定义的方法,所以我不能确定这是否是你想要的。

于 2012-10-24T00:35:20.347 回答