【问题标题】:how to pass a variable value to another view properly如何正确地将变量值传递给另一个视图
【发布时间】:2014-03-07 14:27:18
【问题描述】:

我有两个视图 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;
}
}

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

我哪里错了,或者有什么建议可以得到正确的价值……请帮忙……

【问题讨论】:

  • 移动这一行 invoicing.myChoice = 1;在你展示 viewController 之前。
  • @Greg 谢谢你,你总是乐于助人......它有效...... :)
  • 您希望我将此添加为答案以便您接受吗?
  • @Greg 是的,当然,添加它作为答案。

标签: ios iphone objective-c ipad ivar


【解决方案1】:

您应该在呈现视图控制器之前分配值:

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

【讨论】:

    【解决方案2】:

    正如 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 函数并不总是被串行调用,因此您的代码有可能按照编写的方式运行。但是你不应该期望它总是工作,你应该在调用可以立即使用它们的代码之前初始化变量。

    接受格雷格的回答,我只是对问题添加一点解释。

    【讨论】:

    • 感谢您的解释……它对我的帮助满满.. :)
    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2020-02-17
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多