-2

MainViewMainInvoicingの 2 つのビューがあります

MainViewからint 型の変数値をMainInvoicingに送信しています

これは私のコードです

MainInvoicing.hファイルで int 型 var を宣言しました

@property (nonatomic, assign) int myChoice;

ボタンをクリックしたMainView.mファイルで、MainInvoicing を次のように呼び出しています。

MainInvoicing *invoicing = [[MainInvoicing alloc] initWithNibName:@"Invoicing" bundle:nil];
[self presentViewController:invoicing animated:YES completion:nil];
invoicing.myChoice = 1;

これから、私のMainInvoicingは完全に呼び出されますが、myChoiceはゼロ '0' に等しくなります。それは「1」でなければなりませんが

私はMainInvoicing.mでこの値を受け取っています

- (void)viewDidLoad
{
[super viewDidLoad];
[self Start];
}

そして開始方法は

- (void) Start
{
switch (myChoice)
{
    case 1:
        NSLog(@"value is %d",myChoice);
        break;
    case 2:
        NSLog(@"value is %d",myChoice);
        break;
    default:
        NSLog(@"Oooopppss...%d",myChoice);
        break;
}
}

私はいつもデフォルトの部分にいます…。

どこが間違っているのか、または正しい値を取得するための提案があれば…助けてください…

4

2 に答える 2

1

ビューコントローラーを提示する前に値を割り当てる必要があります:

 MainInvoicing *invoicing = [[MainInvoicing alloc] initWithNibName:@"Invoicing" bundle:nil];
invoicing.myChoice = 1;
[self presentViewController:invoicing animated:YES completion:nil];
于 2014-03-07T14:49:57.833 に答える
0

Greg がコメントで述べたように、コードの順序がすべてです。コードを見ると、呼び出された順序がわかります。

MainInvoicing *invoicing = [[MainInvoicing alloc] initWithNibName:@"Invoicing" bundle:nil];
[self presentViewController:invoicing animated:YES completion:nil];
    [self Start];
        switch (myChoice)
        {
            case 1:
                NSLog(@"value is %d",myChoice);
                break;
            case 2:
                NSLog(@"value is %d",myChoice);
                break;
            default:
                NSLog(@"Oooopppss...%d",myChoice);
                break;
        }
invoicing.myChoice = 1;

したがって、myChoice変数を設定する前に変数にアクセスしようとしているため、1 ではなく 0 を取得しています。

viewDidLoad以上のことから、関数は常にシリアルに呼び出されるとは限らないため、コードが記述どおりに機能する可能性があります。ただし、常に機能するとは考えないでください。変数をすぐに使用できるコードを呼び出す前に、変数を初期化する必要があります。

グレッグの答えを受け入れてください。問題に少し説明を加えただけです。

于 2014-03-07T14:38:49.123 に答える