0

私は(ユーザーがボタンを押して)多くのUIImageViewをプログラムで作成し、この方法で作成されたときにそれぞれにタグを割り当てています:

    int a;

    if (a != nil){

        a = 0;
    }

    a = a + 1;
    image1.tag = a;

問題は、a = a +1 を使用して変数を増やしたいことです: 1,2,3,4... しかし、常に 1 のままなので、各画像には 1 のタグがあります。a++ を追加すると、タグ2 がすべてに割り当てられます。どうして??答えてくれてありがとう

4

3 に答える 3

4

またはその他のプリミティブ型aであると想定しています。intプリミティブ型は決してありませんnil(はい、そうnilです、技術的には です(void *)0が、そこに行くことさえできません。nilプリミティブ型には使用しないでください。); にできるのはオブジェクトだけnilです。したがって、

if (a != nil)

がゼロでない限り常にtrueになるため、毎回ゼロに戻されます。aa

編集:メソッド呼び出しのスコープ内でも宣言aしているため、毎回再作成されます。合成されたプロパティに移動します。

于 2012-05-04T19:33:17.630 に答える
2

これは a が単純型であると仮定しています。

まず、そのような単純な型を決して比較しないでください。


if (a != nil){
    a = 0;
}

ただし、上記の if ステートメントは、最初のボタンが押された後は常に true になります。これは、a が > 0 になり、NULL と評価されないためです。したがって、if ステートメントは常に a をゼロにリセットします。タグをインクリメントする場合は、if ステートメントを削除します。

a は単純な型ではないと仮定します。

int を作成し、if ステートメントも削除します。Heresはいくつかのサポートコードです。

@implementation ViewController{
    int a;
}
-(void)pressed{
    a = a + 1;
    NSLog(@"%d",a);
}
- (void)viewDidLoad{
    [super viewDidLoad];
    a = 0;
    UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    b.frame = CGRectMake(0, 0, 100, 50);
    [b addTarget:self action:@selector(pressed) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:b];
}
@end

于 2012-05-04T19:45:35.213 に答える
0

nilは 0 です。したがって、メソッドの開始時に が 0 でない場合aは、0 に設定してからインクリメントします。nil チェックを完全に kill するだけで動作するはずです。

于 2012-05-04T19:33:57.617 に答える