@synthesize が機能せず、Objective-C で基本的な操作が機能しない
-
12-09-2019 - |
質問
なぜこのコードが機能しないのかわかりません。ボタンをクリックしたとき (アクション:buttonclick) 2 つのテキスト ボックス (MyTextLabel と MyTextLabel2) のテキスト増分値「r」を 1 ずつ変更する必要があります。コードは次のとおりです。
MainView.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface MainView : UIView {
IBOutlet UIButton *MyButton;
IBOutlet UILabel *MyTextLabel;
IBOutlet UILabel *MyTextLabel2;
}
@property (nonatomic, retain) UIButton *MyButton;
@property (nonatomic, retain) UILabel *MyTextLabel;
@property (nonatomic, retain) UILabel *MyTextLabel2;
- (IBAction)buttonclick;
@end
MainView.m:
#import "MainView.h"
#include <stdlib.h>
#include <libc.h>
@implementation MainView
@synthesize MyButton, MyTextLabel, MyTextLabel2;
int r;
- (IBAction)buttonclick {
r++
if(r < 50) {
MyTextLabel.text = @"< 50";
}
else {
MyTextLabel2.text = @"=> 50";
}
}
@end
解決
私は何かがあなたがint r
を使用している方法で間違っている気がします。 static int r;
ラインの下、MainView.hに@interface
ラインの上部に- (IBAction)buttonclick;
を入れて試してみても追加します:
+(void) initialize;
次にMainView.mからint r;
を削除します。その後MainView.mに追加します:
+(void) initialize {
count = 0;
}
他のヒント
次の 2 つの問題があります。
- 宣言することはできません
int r
どこにあるか。これは、インターフェイスの変数ブロック (ボタンとラベルを宣言する場所、またはメソッドの外で宣言する場所) またはメソッド定義で宣言する必要があります。 - r++ を含む行はセミコロンで終わっていません。
あなたは正確に、あなたがそれを期待する方法は動作していないものを、あなたの質問に言うことはありません。私の推測では、あなたの店が実際に正しく接続されていないことになるだろう。あなたはこのようbuttonClick
するために、ログ文を追加したい場合があります:
NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);
ポイントビーイングは、主に、それはnil
されていないことを確認します。
のObjective-Cでは、変数やプロパティの名前は、キー値コーディング(KVC)プロトコル(常にmyButtonという、決してMyButtonという)に準拠するように小文字で始めなければなりません。 @synthesize
ディレクティブは、セッターとゲッターを生成するには、このに依存しています。このように、myButton
の@synthesize
ため-(void)setMyButton:(UIButton *)button
と-(UIButton *)myButton
を生成します。
それは場合に役立ちますので、MyButton
とその同僚は小文字と見作るのですか。
-buttonClick:
方法は次のように宣言する必要がありますので、アクションメソッドは常に、送信者の引数を持っています:
-(IBAction) buttonClick: (id)sender {
}