我有两个观点 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;
}
}
我总是默认部分......
我错在哪里或有任何建议来获得正确的价值......请帮助...
答案 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的回答,我只是对这个问题添加了一些解释。