0

コードについてサポートが必要です。アプリを初めて開いたときにポップアップするUIAlertがあります。そのポップアップには、2つのボタンがあり、ユーザーはそのうちの1つを選択します。ユーザーがコードなどを実行するために選択したボタンをアプリに記憶させたい。問題は、私がこのコードをここに持っているということです:

-(void)changeLabel{


        progressView.progress += 0.25;
    scan.hidden = YES;


        if (progressView.progress == 1 ) {
            label.hidden = YES;

            progressView.hidden = YES;

            [timer invalidate];

            imagesText.hidden = NO;


            int randomNumber = arc4random() % 4;

            switch (randomNumber) {
                case 0:


                    imagesText.image = [UIImage imageNamed:@"image1.png"];


                    break;

                case 1:


                    imagesText.image = [UIImage imageNamed:@"image2.png"];


                    break;

                case 2:

                    imagesText.image = [UIImage imageNamed:@"image3.png"];

                    break;
                case 3:

                    imagesText.image = [UIImage imageNamed:@"image4.png"];

                default:
                    break;

        }
    }
}

したがって、ユーザーが最初のボタンを選択した場合、アプリはケース0、1、2を切り替え、2番目のボタンを選択した場合は3と他のボタンを切り替えるようにします。ただし、どちらの場合もコードの先頭を同じにする必要があります。私はいくつかのものを試しましたが、それは私が望んでいたようには機能しません。ご協力ありがとうございました!

更新:エラーを修正しました。だから今私はこれを持っています:

- (void)viewDidLoad
{


    if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"alert"] ]) {
        [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"alert"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Welcome!" message:@"Select your language" delegate:self cancelButtonTitle:@"Button1" otherButtonTitles:@"Button2", nil];



        [alerta show];
        [alerta release];

    }


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];



   progressView.progress += 0.25;
    scan.hidden = YES;


    if (progressView.progress == 1 ) {
        label.hidden = YES;

        progressView.hidden = YES;

        [timer invalidate];

        imagesText.hidden = NO;

        int randomNumber;

        if ([buttonTitle isEqualToString:@"Button1"]) {

             randomNumber = arc4random() % 3;

        }else if ([buttonTitle isEqualToString:@"Button2"]) {

             randomNumber = arc4random() % 3 + 3;

        }

        switch (randomNumber) {
           //CODE
        }
    }
}

問題は、そのすべてのコードが次の場所から呼び出されることになっていることです。

 - (IBAction)scan:(id)sender {

    label.hidden = NO;
    imagesText.hidden = YES;
    progressView.hidden = NO;


    progressView.progress = 0;

    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(alertView) userInfo:nil repeats:YES];

}

そこで、@ selectorをalertViewに変更しました。すべてのコードを実行するボタンを押すと、SIGABRTエラーが発生します。なぜ何かアイデアはありますか?助けてくれてありがとう!

4

1 に答える 1

0

ユーザーがボタンを選択するときは、タイトルやタグなど、ボタンの一意の値をプロパティに入力する必要があります。それができたら、randomNumber定義の前にifステートメントを置くことができます-次のようになります:

if (buttonTitle isEqualToString:@"First Button") {
        int randomNumber = arc4random() % 3; // Gives choices of 0,1, or 2
    }else if (buttonTitle isEqualToString:@"Second Button"){
        int randomNumber = arc4random() % 3 + 3; // Gives choices of 3,4, or 5
    }

     switch (randomNumber) .... (rest of your code)

else-ifステートメントでは、+ 3により、switchステートメントの選択肢が3から始まり、そこから上に向かっていくことが保証されます(他にいくつの選択肢があるかはわかりません)。

于 2012-05-21T03:18:22.173 に答える