1

こんにちは、少し問題があります。私のプログラムは、最初のボタンをクリックして生成されるランダムな値を覚えていません。しかし、その値を別のボタンで使用したいのですが、問題があります。その値を返そうとすると、プログラムはこのメソッドが値を返すべきではないと言います。私のコードは次のようになります。

int randomprocess;
- (IBAction)button:(id)sender {
randomprocess = rand() % 3;
// Do something    }
- (IBAction)b1:(id)sender {
if (randomprocess == 0) {
    // Do something
} else {
    // Do something else
}

最初の行を書かないと、2 番目のボタンは「randomprocess」を認識しません。そして今、私がそれを宣言したとき、それはまだゼロか、私が設定した数値と同じです。

4

2 に答える 2

2

おそらく、グローバル変数をカバーする、まったく同じ名前の iVar / プロパティを宣言しました。グローバル変数またはiVar のみを使用してください。

メソッドまたはオブジェクト ヘッドの外側の宣言int randomprocess;は、「通常の」グローバル C 変数になります。

iVar は、オブジェクトに関連するローカル変数です。プロパティは (通常) 特定のアクセサーを持つ iVar です。グローバル変数とローカル変数 (resp、iVar) の両方を宣言した場合、グローバル変数は表示されませんが、ローカル変数によってカバーされます。

一般に、グローバル変数を使用することはお勧めできません。必要に応じて、静的にします。iVar を使用することをお勧めします。

編集 プロパティを作成するには、ヘッダーは次のようになります。

@interface myclass
@property (nonatomic,assign) int randomprocess;
// ...
@end

そして実装のために:

@implementation myclass
@synthesize randomprocess; // only for XCode < 4.4 needed
// ...

- (IBAction)button:(id)sender {
   self.randomprocess = rand() % 3;
 // Do something    
 }
- (IBAction)b1:(id)sender {
   if (self.randomprocess == 0) {
    // Do something
   } else {
    // Do something else
   }
 //
 } 
于 2012-09-13T06:58:25.230 に答える
1

または、このように変数を宣言する必要があります

@interface myclass {
 int randomprocess;
}

.h ファイル内または:

@implementation myclass {
 int randomprocess;
}

.m ファイル内

これは、プロパティなしで内部変数 (iVar) を宣言します

これを .m ファイル内で行う場合 (2 番目のサンプル)、この変数は現在のファイルでのみ使用できます。

これを .h ファイル内で行う場合 (最初のサンプル)、この変数は現在の .m およびサブクラスでも使用できます。

于 2012-09-13T20:53:10.080 に答える