【问题标题】:Passing data between different view controller [duplicate]在不同的视图控制器之间传递数据[重复]
【发布时间】:2014-10-07 21:22:43
【问题描述】:

我想从我的 loginView 控制器 (ViewController) 获取用户名 (txtUsername) 到 SecondViewController,以便打印消息“欢迎用户名”。我在视图控制器之间使用 Segue (login_success)。在我的SecondViewController 中,我有NSString (stringUsername) 来存储我的FirstViewController 中的用户名。这是我在SecondViewController 中的代码:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSString *segueIdentifier = [segue identifier];
    if ([segueIdentifier isEqualToString:@"login_success"]) {
        ViewController *homeController = (ViewController *)[segue destinationViewController];
        homeController.txtUsername.text = _stringUsername;
    }
}

当我设置断点时,它给出的输出为“打印 self->_stringUsername 的描述: (NSObject) NSObject = "

【问题讨论】:

    标签: ios objective-c uiviewcontroller uistoryboardsegue


    【解决方案1】:

    几个观察:

    1. 你说:

      我想从我的 loginView 控制器(ViewController)获取用户名(txtUsername)到SecondViewController...

      在这种情况下,您的prepareForSegue 应该在源视图控制器中,而不是目标视图控制器中。 segue.destinationViewController 将是 SecondViewController,而不是 ViewController

      坦率地说,我无法协调上面引用的您的意图与您的代码 sn-p(看起来您试图从 SecondViewControllerViewController 进行转换)。

    2. 当您更新目标视图控制器时,您不应尝试设置IBOutlettext 属性。 prepareForSegue 根本不应该尝试使用IBOutlet 引用,因为当prepareForSegue 被调用时,目标视图还没有被实例化,所有IBOutlet 引用都可能是nil

      相反,源视图控制器中的prepareForSegue 应该只在目标控制器中设置NSString 属性。在NSString 属性的基础上填充IBOutlettext 属性的责任落在目标视图控制器中的viewDidLoad 身上。

    【讨论】:

    • 非常感谢您抽出时间来纠正我,因为我是新来的。我有更多的困惑,但我会试着弄清楚这就是学习的方式。再次感谢。
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多