1

私は2つのクラスを持っています。1 つは Label、もう 1 つは LabelGestureRecognizer です。LabelGestureRecognizer には getName というメソッドがあり、Label クラスを介してメソッドを呼び出したいです。

以下は私の問題の簡単な例です。
「getName」メソッドを呼び出そうとしていますが、「「LabelGestureRecognizer」の目に見える @interface がセレクター「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;

LabelGestureRecognizer.m:

- (NSString *) getName:(int) position
{
    NSString *resultat = @"";
    switch (position) {
        case 0:
            resultat = @"Test 1";
            break;
        case 1:
            resultat = @"Test 2";
            break;
        default:
            break;
    }
    return resultat;
}

LabelGestureRecognizer.h:

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

ラベル.m:

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

5 に答える 5

1

発生する可能性のある理由はたくさんありますが、一般的には、フラグを立てたコード行で、参照しているセレクターがオブジェクトが持っていると考えている型のインターフェイスにあるという証拠が見られないということです。

于 2012-11-12T10:23:56.883 に答える
1

selfinを使用している場合Label.m、これは現在のクラス オブジェクトを表します。LabelGestureRecognizerオブジェクトを表す必要がある場合は、 selfas の代わりにそれを使用する必要があります。

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

LabelGestureRecognizer.hまた、ファイルで次のように宣言する必要があります。

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

エラーメッセージは、クラスファイルでgetNameメソッドの宣言を確認できないことを示しています。LabelGestureRecognizer.h

于 2012-11-12T10:23:57.977 に答える
1

LabelGestureRecognizer.h のインターフェースでセレクターを宣言する必要があります。

 @interface
 - (NSString *) getName:(int) position;
 @end
于 2012-11-12T10:28:29.260 に答える
0

こんにちは、 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]];

クラス メソッドの詳細については、このリンクをたどることができます。Objective-C クラス メソッドの記述

于 2012-11-12T10:27:43.053 に答える
0

そのメソッドがあるクラスのオブジェクトを作成し、最後にそのオブジェクトでメソッドを呼び出すだけです。非常に簡単です...

于 2012-11-12T10:44:08.850 に答える