【问题标题】:iOS app crashes on push segue, but only on installationiOS 应用程序在 push segue 上崩溃,但仅在安装时崩溃
【发布时间】:2014-07-01 13:45:54
【问题描述】:

在第一次安装我的应用程序时,我尝试执行推送到 segue。我嵌入了 UINavigationController。

但是当我尝试按下按钮转到我的第二个 viewController 时,应用程序崩溃并出现此错误:

“由于未捕获的异常'NSGenericException'而终止应用程序,原因:'推送segues只能在源控制器由UINavigationController的实例管理时使用。'”

但它只发生在第一次尝试安装时。如果我什么都不做并再次运行应用程序,segue 会成功将我发送到第二个视图控制器。

关于发生了什么的任何想法?让我知道我还需要提供哪些信息。

编辑

一开始我确实有 UIPageViewControllers 作为应用介绍屏幕。

在 AppDelegate.m 我有

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"]) {
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];

UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *walkthrough =
[storyBoard instantiateViewControllerWithIdentifier:@"IntroViewController"];
[self.window setRootViewController:walkthrough];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"];
}
return YES;

我在 UIPageView 上有一个按钮,它将用户发送到开始开始的 ViewController

- (IBAction)ready:(id)sender {


UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController =
[storyBoard instantiateViewControllerWithIdentifier:@"ViewController"];
[self presentViewController:viewController animated:YES completion:nil];


}

【问题讨论】:

  • 你怎么知道它在第一次安装和其他运行时相同的 segue 和完全相同的环境?
  • 我进行了编辑,解释了开头的情况
  • 错误消息准确描述了问题:“只有当源控制器由 UINavigationController 的实例管理时,才能使用推送 segues。”您有一个推送序列,但您没有将视图控制器推送到导航堆栈上。如果您在应用程序中没有导航控制器并且不打算拥有一个,那么不要将 segues 的类型设置为“推送”。如果您的应用程序打算有一个导航控制器但没有然后添加一个并将视图控制器推送到它上面。你的应用是否应该有导航控制器是一个不同的问题。
  • 我确实有一个导航控制器。在用户完成首次安装时出现的介绍屏幕后,我只是没有将用户发送到导航控制器。我将它们发送到 ViewController。现在我在他们查看介绍屏幕后将他们发送到导航控制器,应用程序运行良好:)

标签: ios uinavigationcontroller segue uistoryboardsegue


【解决方案1】:

好吧,万一有人遇到这个问题,在介绍屏幕之后,我将用户发送到 NavigationViewController 而不是像这样的 ViewController

- (IBAction)ready:(id)sender {


UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController =
[storyBoard instantiateViewControllerWithIdentifier:@"NavigationViewController"];
[self presentViewController:viewController animated:YES completion:nil];


}

这让 segues 开始工作。感谢 Martin H 的探索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多