如何正确地将变量值传递给另一个视图

时间:2014-03-07 14:27:19

标签: ios iphone objective-c ipad ivar

我有两个观点 MainView MainInvoicing

来自 MainView 我将int类型变量值发送到 MainInvoicing

这是我的代码

MainInvoicing.h 文件中我声明了int type 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;
}
}

我总是默认部分......

我错在哪里或有任何建议来获得正确的价值......请帮助...

2 个答案:

答案 0 :(得分:1)

您应该在呈现视图控制器之前指定值:

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

答案 1 :(得分:0)

正如格雷格在评论中所说,这完全取决于代码的顺序。如果查看代码,您应该看到它的调用顺序。

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函数并不总是按顺序调用,所以代码可能会在编写时工作。但是你不应该期望它总能工作,你应该在调用可以立即使用它们的代码之前初始化变量。

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