为什么这种方法不允许我引用任何内容?

时间:2015-05-20 06:56:13

标签: objective-c class methods viewcontroller

我最近创建了一个可以从其他类调用的方法,这是我的代码。

在ViewController1.h

+ (void)updateName:(id)sender;

在ViewController1.m

+ (void)updateName:(id)sender {

}

方法是调用和工作,但是我在ViewController1.m文件中有另一个方法

-(void)updateString {
        NSLog(@"IT WORKED");
}

但是,我尝试在我的updateName方法中调用它:

+ (void)updateName:(id)sender {
    [self updateString];
}

但是我得到一个错误说"没有已知的选择器类的方法' updateString' "任何人都可以告诉为什么会发生这种情况以及如何调用此方法?感谢。

2 个答案:

答案 0 :(得分:0)

方法前面的+表示一个类方法,即您不需要创建ViewController1的新实例来调用该方法。其中[self updateString]是一个实例方法,即您需要创建该类的新实例才能执行它。这里的问题是范围的差异。见下文:

在另一个班级里面:

[ViewController1 updateName:SOMETHING];

VS

ViewController1 *newViewController1 = [[ViewController1 alloc] init];
[newViewController1 updateString];

<强> 修改

如果你想从那个类中调用该方法,你可以这样做吗?

+ (void)updateName:(id)sender {
    [ViewController1 updateString];
}

但是,它无法引用或更新任何类属性等。因此,根据您的方法名称,这可能无法解决您的问题。

这有意义吗?

答案 1 :(得分:0)

您正在做一些奇怪的事情,但要解决您的问题,只需在您的方法名称前面替换 - +。