ios - 'class-name' 没有可见的@interface 声明了选择器 'method-name'

原文 标签 ios objective-c syntax

我正在我的 View Controller 中编写如下方法:

- (IBAction)expressionEvaluation:(UIButton *)sender {
    NSDictionary *testValues = [NSDictionary dictionaryWithObjectsAndKeys:@"x", 2, @"y", 3, @"z", 4, nil];
    //the below line gives the error
    double result = [self.brain evaluateExpression:self.brain.expression usingVariableValues:testValues];
    NSString *resultString = [NSString stringWithFormat:@"%g", result];
    self.display.text = resultString;
}

在我的“大脑”类(class)中,我已经声明了尚未完成的方法:
#import <Foundation/Foundation.h>

@interface CalculatorBrain : NSObject
- (void) pushOperand:(double)operand;
- (void) setVariableAsOperand:(NSString *)variableName;
- (void) performWaitingOperation;
- (double) performOperation:(NSString *)operation;

@property (readonly) id expression;
+ (double)evaluateExpression: (id)anExpression
         usingVariableValues: (NSDictionary *)variables; //declared here
@end

...在 .h 和 .m 中:
+ (double) evaluateExpression:(id)anExpression usingVariableValues:(NSDictionary *)variables {
    double result = 0;
    int count = [anExpression count];
    for (int i = 0; i < count; i++) {

    }

    return result;
}

为什么我会收到这个“‘CalculatorBrain’没有可见的@interface 声明了选择器‘evaluateExpression:usingVariableValues’”错误?我是objective-c的新手,但我想这意味着它没有看到我的声明。不过,我不确定这是否是语法/格式问题,因为我是该语言的新手。

最佳答案

请注意,您声明 evaluateExpression:usingVariableValues:作为类方法

+ (double)evaluateExpression: (id)anExpression  // + means class method
     usingVariableValues: (NSDictionary *)variables; //declared here

并像实例方法一样使用它
// assuming self.brain is an instance of CalculatorBrain
[self.brain evaluateExpression:self.brain.expression usingVariableValues:testValues];

所以要么将方法更改为
- (double)evaluateExpression: (id)anExpression  // - means instance method
     usingVariableValues: (NSDictionary *)variables; //declared here

或者这样称呼
[CalculatorBrain evaluateExpression:self.brain.expression usingVariableValues:testValues];

关于ios - 'class-name' 没有可见的@interface 声明了选择器 'method-name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058475/

相关文章:

ios - 应用程序标识符不匹配 - App ID XCode

ios - 暂时禁用轻按手势

ios - 当应用程序进入前台时,如何重新启动基于 block 的动画?

ios - 如何使用httpPost上传几张图片?

mysql - SQL基于多行键选择两部分组合键的一半?

iphone - MKOverlayView 中的剪辑 :drawMapRect

ios - UIButton RAC 绑定(bind)

powershell - PowerShell-函数中的 “Write-Output”与 “return”

c# - 函数() : this(null) {}

ios - 如何将我的网址图像放入轮播?