Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么我会得到一个“a”;对于';NSDecimalNumber';声明选择器";我的方法?_Iphone_Objective C_Xcode_Class Method - Fatal编程技术网

Iphone 为什么我会得到一个“a”;对于';NSDecimalNumber';声明选择器";我的方法?

Iphone 为什么我会得到一个“a”;对于';NSDecimalNumber';声明选择器";我的方法?,iphone,objective-c,xcode,class-method,Iphone,Objective C,Xcode,Class Method,我一定错过了一些简单的东西。不管怎样,我一开始只是做一个常规函数 NSDecimalNumber* aa(NSMutableString *string) {code} 然后我会按下这样一个按钮来调用: - (IBAction)parse:(id)sender { string1=[NSMutableString stringWithFormat:@"%@", screen.text]; NSDecimalNumber *output=aa(string1);} (screen.text来自

我一定错过了一些简单的东西。不管怎样,我一开始只是做一个常规函数

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];
在那次尝试中,我得到了两个错误--“对于'NSDecimalNumber'没有可见的@interface声明选择器'aa',”和“在类方法中访问的实例变量'number'

因此,我再次尝试使用实例方法。将+'更改为-,改为使用

NSDecimalNumber *output;
[output aa:string1];
这纠正了第二个错误,但没有纠正第一个错误。我不明白为什么它不能识别@interface中的方法。而且,我尝试改变的不仅仅是这些——我一直在尝试多种方法来调用该方法,但似乎没有任何效果。有什么想法吗?

此函数调用:

NSDecimalNumber *output=[[NSDecimalNumber alloc] aa:string1];
..正试图调用
aa
NSDecimalNumber
实例。我认为这不是你想要的,你的
aa
方法不是你班的一员吗?另外,您没有调用类初始值设定项(尽管您不需要这样做,因为只要方法的定义以
+
开头,它就是静态的):

--更新--

要解决“实例变量”错误,需要将该方法设置为实例方法。将定义中的
+
更改为
-
,并将其称为:

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

// Call it like this _if calling from within MyClass only_ (hence, "self")
NSDecimalNumber *output = [self aa:string];

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

好吧,将其更改为“NSDecimalNumber*output=[ViewController aa:string1];”似乎已经修复了@interface错误。但是,为什么它仍然说属性“number”是一个实例变量,然后又给了我一个错误呢?我会更新我的答案。这意味着你的方法不能是静态的。太好了!一切都很顺利。谢谢你的快速回复!
// MyClass method definition
- (NSDecimalNumber*) aa:(NSMutableString*) string

// Call it like this _if calling from within MyClass only_ (hence, "self")
NSDecimalNumber *output = [self aa:string];