4

由于我对 IOS 开发非常陌生,因此我并不真正了解开发 iPhone 应用程序时要使用的所有机制。

在这里,我想做的是在执行 segue 后调用另一个控制器。

上下文 :

我有我的第一个页面,它基本上包含一个登录页面,带有一个用户/密码系统。我创建了一个通过单击提交按钮调用的 segue。这是代码:

- (IBAction)Connect:(UIButton *)sender
{
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"passwordsample", @"usernamesample", 
                          nil];

    if ((![[dict allKeys] containsObject:TFLogin.text])) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Login or password incorrect" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        NSLog(@"Connection Not OK");
    }
    else {
        [self performSegueWithIdentifier:@"LoginSegue" sender:sender];
        NSLog(@"Connection OK");
    }
}

这是 prepareForSegue 函数:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    HomeController *home = (HomeController *) segue.destinationViewController;
    home.sentLogin = TFLogin.text;
}

事实是,当我单击提交按钮(在登录页面上)时,日志显示用户已正确找到,然后我收到如下错误:

2012-04-30 11:24:44.630 AppName[1066:f803] -[UINavigationController setSentLogin:]: unrecognized selector sent to instance 0x6d73c30
2012-04-30 11:24:44.630 AppName[1066:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setSentLogin:]: unrecognized selector sent to instance 0x6d73c30'

这是故事板:

故事板

第二个 NavigationController 将替换为 Tab Bar Controller。但是对于一些测试,我放了这个。

有人可以指导我,告诉我我做错了什么和/或向我发送一些关于故事板和导航的最新指南吗?

非常感谢 !

4

3 回答 3

0

ProjectManagementViewController *projectManagementView =[[ProjectManagementViewController alloc]initWithNibName:@"ProjectManagementViewController" bundle:nil];

 [self.navigationController pushViewController:projectManagementView animated:NO];
于 2012-04-30T13:26:41.993 回答
0

从错误的外观来看,segue.destinationViewController 似乎不是您认为的那样。听起来你有一个导航控制器。

如果没有故事板,诊断有点困难,但请尝试:

UINavigationController *nav = (UINavigationController*)segue.destinationViewController;
HomeController *home = (HomeController*)nav.topViewController;

如果这不起作用,您可能需要在第二行放置一个断点并查看 nab 控制器以查看 HomeController 在其堆栈中的位置。

于 2012-04-30T12:41:06.637 回答
0

你可以像在 ios5 中那样做:

[self performSegueWithIdentifier:@"your-segue-name" sender:self];

您将创建从一个视图到另一个视图的转场,但不是通过按钮或其他任何东西,只需从您的第一个视图拖动到第二个视图您的转场,当您的过程完成后,只需调用上面的代码。

希望这可以帮助..

编辑:您需要在情节提要中为您的segue命名,只需单击它,然后在右侧检查器中命名..

于 2012-04-30T13:46:50.570 回答