【问题标题】:push view controller with arguments using ios5 and storyboard使用 ios5 和情节提要推送带有参数的视图控制器
【发布时间】:2011-12-26 14:01:42
【问题描述】:

我正在使用 sdk 5 和 Storyboard 开发一个 iPad 应用程序,该应用程序来自一个已经工作的 iPhone 应用程序(使用单独的 xibs 开发)。我了解情节提要的工作原理,但我想推送带有参数的视图控制器。按钮调用 logIn2 操作,如:

   - (IBAction)logIn2: (NSString *)strUser: (NSString *)strPass
{
    userViewController *UserViewController = [[userViewController alloc] initWithNibName:@"userViewController" bundle:nil stringOne:strUser stringTwo:strPass];
    //UserViewController.hidesBottomBarWhenPushed = YES;
    [[self navController] pushViewController:UserViewController animated:YES];
}

这工作正常,但使用 sdk 5 在第一行返回错误。如何通过参数推送视图?谢谢。

【问题讨论】:

  • 错误:接收器类型 'userViewController' 例如消息未使用选择器 'initWithNibName:bundle:stringOne:stringTwo:' 声明方法 [4]

标签: objective-c cocoa-touch ios5 uikit xcode-storyboard


【解决方案1】:

如果您说您想将您的应用程序转换为使用 Storyboard 和 Segues,那么您将制作一个 Segue 来推送 UserViewController。在 UserViewController 中放置一些属性来存储参数。然后覆盖 prepareForSegue 并设置其中的属性。有关详细信息,请参阅此答案:

Properly accessing a segue's destination view controller to assign protocol delegates

【讨论】:

    【解决方案2】:

    从错误消息中很明显,在您的 UserViewController 上没有方法声明 initWithNibName:bundle:stringOne:stringTwo:'。你的 UserViewController 是什么样子的?

    【讨论】:

    • - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil stringOne:(NSString *)aStringOne stringTwo:(NSString *)aStringTwo {
    【解决方案3】:

    您是否在 .h 文件中声明了自定义初始化程序?否则,只会找到标准的 initWithNibName 初始化程序作为选择器,而不是您指定的初始化程序 - 因此会出现错误消息。

    【讨论】:

    • 在标题中声明它是不够的;还必须在 .m. 中实现它。
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多