Iphone 如何在iOS中从另一个类调用方法?

Iphone 如何在iOS中从另一个类调用方法?,iphone,ios,class,methods,label,Iphone,Ios,Class,Methods,Label,我有两门课。第一个是标签,另一个是标签标签识别器。在LabelGestureRecognitor中有一个名为getName的方法,我希望通过Label类调用该方法 下面是我的问题的一个简单例子。 我正在尝试调用方法“getName”,但出现了一个错误,错误是: “没有可见的@interface for'LabelgestureRecognitizer'声明选择器'getName:'” ViewController.h: @property (nonatomic, strong) UILabel

我有两门课。第一个是标签,另一个是标签标签识别器。在LabelGestureRecognitor中有一个名为getName的方法,我希望通过Label类调用该方法

下面是我的问题的一个简单例子。
我正在尝试调用方法“getName”,但出现了一个错误,错误是: “没有可见的@interface for'LabelgestureRecognitizer'声明选择器'getName:'”

ViewController.h:

@property (nonatomic, strong) UILabel *valueLabel;
ViewController.m:

- (void)viewDidLoad
{
    valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 366, 320, 50)];
    valueLabel.textAlignment = UITextAlignmentCenter;
    valueLabel.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:valueLabel]; 
}

- (void) wheelDidChangeValue:(NSString *) newValue {
    self.valueLabel.text = newValue;
}
标签h:

@protocol LabelDelegate <NSObject> 
@required
 -(void) wheelDidChangeValue:(NSString *) newValue;
@end

@class LabelGestureRecognizer;
LabelGestureRecognitor.h:

 @interface LabelGestureRecognizer : UIGestureRecognizer
 {
     NSDate *previous;
     double current;
 }
标签m:

 LabelGestureRecognizer *recognizer = [[LabelGestureRecognizer alloc] init];
 [self.delegate wheelDidChangeValue:[self getName:0]];

可能发生这种情况的原因有很多,但一般来说,在它标记的代码行,它看不到任何证据表明所引用的选择器位于它认为对象具有的类型的接口中。

当您在
Label.m
中使用表示当前类对象的
self
时。如果需要表示
LabelgestureRecognitor
对象,则需要使用该对象来代替
self
as

[self.delegate wheelDidChangeValue:[recognizer getName:0]];
您还应在
LabelGestureRecognitor.h
文件中声明以下内容:

@interface LabelGestureRecognizer : UIGestureRecognizer
 {
     NSDate *previous;
     double current;
 }
- (NSString *) getName:(int) position;
@end

您的错误消息是,它无法在
LabelgestureRecognitizer.h
类文件中看到
getName
方法的声明。

您好,您只需按alloc类创建类的实例并调用该方法,使用后即可释放该方法

LabelGestureRecognizer *labelGestureRecognizer = [[LabelGestureRecognizer alloc] init];

[self.delegate wheelDidChangeValue:[labelGestureRecognizer getName:0]];
[labelGestureRecognizer release];
但作为您的代码,我建议您创建类方法

+ (NSString *) getName:(int) position
{
    NSString *resultat = @"";
    switch (position) {
        case 0:
            resultat = @"Test 1";
            break;
        case 1:
            resultat = @"Test 2";
            break;
        default:
            break;
    }
    return resultat;
}
你可以通过

 [self.delegate wheelDidChangeValue:[LabelGestureRecognizer getName:0]];

有关类方法的更多信息,请点击此链接

,您需要在LabelGestureRecognizer.h的接口中声明选择器

 @interface
 - (NSString *) getName:(int) position;
 @end

只需创建该方法所在的类的对象,并最终使用该对象调用该方法。非常简单…

“我有一个名为Label.m的类,我想调用一个名为getName from LabelGestureRecognitor class的方法。”这看起来有点让人困惑。根据示例,
getName
位于
LabelGestureRecognizer
中,您正试图从
Label
类调用。但你的陈述正好相反。哪一个是正确的?我认为错误消息“No visible@interface for'LabelgestureRecognitizer'声明选择器'getName:”清楚地表明您尚未在.h文件中声明getName方法。你能在问题中添加.h文件代码吗。我确信您没有在那里声明,也没有用错误的签名声明。我已经用上面的.h文件更新了我的答案。请检查并让我知道。[self.delegate wheelDidChangeValue:[LabelgestureRecognitor getName:0];我收到一个错误,提示:“没有已知的slector-getName的类方法”。您是否将类方法符号从-更改为+??并在类中导入LabelGestureRecognitizer,同时更新接口(.h)文件+(NSString*)getName:(int)位置@阿披实哈瓦,+1。这是一个不错的建议,尽管它与问题无关。也可以使用classname。感谢@ACB的支持:)
 @interface
 - (NSString *) getName:(int) position;
 @end