0

我必须在这里遗漏一些简单的东西。无论如何,我一开始只是制作一个常规函数,

NSDecimalNumber* aa(NSMutableString *string)
{code}

然后我会通过按下这样的按钮来调用它:

- (IBAction)parse:(id)sender {
string1=[NSMutableString stringWithFormat:@"%@", screen.text];
NSDecimalNumber *output=aa(string1);}

(screen.text 来自标签)但是,在它的中途,我意识到该函数不能使用我的 viewcontroller.m 类的其余部分中的变量(反之亦然),所以我决定将该函数实现为代替方法。这就是我所做的。首先,我将它添加到 viewcontroller.h,

+ (NSDecimalNumber*) aa:(NSMutableString*) string;
@property (nonatomic, strong) NSDecimalNumber *number; //the number I'm working with

合成了我的属性,将我的函数声明更改为这个,

+ (NSDecimalNumber*) aa:(NSMutableString*) string

并试图这样称呼它,

NSDecimalNumber *output=[[NSDecimalNumber alloc] aa:string1];

通过这种尝试,我得到了两个错误——“没有可见的@interface for 'NSDecimalNumber' 声明了选择器'aa,'”和“在类方法中访问的实例变量'number'”。

所以我再次尝试了一个实例方法。将 +'s 更改为 -'s 并改为使用

NSDecimalNumber *output;
[output aa:string1];

这纠正了第二个错误,但没有纠正第一个错误。我无法弄清楚为什么它无法识别@interface 中的方法。此外,这些并不是我尝试更改的唯一内容——我一直在尝试多种方法来调用该方法,但似乎没有任何效果。有任何想法吗?

4

2 回答 2

1

这个函数调用:

NSDecimalNumber *output=[[NSDecimalNumber alloc] aa:string1];

..正在尝试aa调用NSDecimalNumber. 我认为这不是您想要的,您的aa方法不是班级的成员吗?此外,您没有调用类初始化程序(尽管您不需要,因为您的方法是静态的,只要它的定义以 开头+):

// MyClass method definition
+ (NSDecimalNumber*) aa:(NSMutableString*) string

// Called with
NSDecimalNumber *output=[MyClass aa:string1];

- 更新 -

要解决“实例变量”错误,您需要将该方法设为实例方法。将定义更改+-并这样称呼它:

// MyClass method definition
- (NSDecimalNumber*) aa:(NSMutableString*) string

// Call it like this _if calling from within MyClass only_ (hence, "self")
NSDecimalNumber *output = [self aa:string];
于 2013-01-17T22:15:53.347 回答
0

如果要向其中添加方法NSDecimalNumber,则需要使用类别。您的代码向视图控制器子类添加了一个方法。

于 2013-01-17T22:17:40.127 回答