Objective C:类方法声明错误

时间:2012-10-24 00:29:31

标签: iphone objective-c ios ipad

更新

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

我已将该行代码修改为:

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

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

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

ORIGINAL

为什么我在视图的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

2 个答案:

答案 0 :(得分:2)

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

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

使用-代替+

或者,如果您打算将其作为类方法,请将其称为:

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

答案 1 :(得分:0)

如果要添加类级方法,则不是在实例上调用方法 - 而是在类本身上调用。例如:

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

会变成:

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

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