-2

我有两个视图MainViewMainInvoicing

MainView我向MainInvoicing发送一个 int 类型变量值

这是我的代码

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在设置变量之前访问它,这就是为什么你得到 0 而不是 1。

综上所述,您的代码有可能按照编写的方式工作,因为该viewDidLoad函数并不总是被串行调用。但是你不应该期望它总是工作,你应该在调用可以立即使用它们的代码之前初始化变量。

接受格雷格的回答,我只是为这个问题添加了一些解释。

于 2014-03-07T14:38:49.123 回答