【问题标题】:Unable to navigate to UIViewController from AppDelegate [duplicate]无法从 AppDelegate 导航到 UIViewController [重复]
【发布时间】:2019-09-22 05:21:52
【问题描述】:

我正在尝试从 AppDelegate didViewLoadFinished 函数导航,但我无法成功,因为我对 ios 完全陌生。我正在为 ViewControllers 使用情节提要。

我还检查了像这样的其他解决方案:Swift - pushViewController from appDelegate, rootViewController.navigationController is nil 但它并没有解决我的问题。

这是我在故事板上的 ViewController:

这是我尝试加载新 ViewController“MultipleMarkersViewController”的方式:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main.storyboard" bundle:nil];
            MultipleMarkersViewController *wc=[storyboard instantiateViewControllerWithIdentifier:@"MultipleMarkersView"];
            [self.window.rootViewController.navigationController pushViewController:wc animated:YES];

预期的结果是加载新的 ViewController。 但实际结果是“应用程序崩溃”,日志输出如下:

0   CoreFoundation                      0x000000010894f6fb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000107ef3ac5 objc_exception_throw + 48
    2   UIKitCore                           0x00000001119f9624 +[UIStoryboard storyboardWithName:bundle:] + 675
    3   Runner                              0x00000001060b09bd __57-[AppDelegate application:didFinishLaunchingWithOptions:]_block_invoke + 909
    4   Flutter                             0x000000010614c9a2 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 115
    5   Flutter                             0x0000000106169616 _ZNK5shell21PlatformMessageRou<…>

【问题讨论】:

  • 您应该只使用“Main”作为情节提要名称。将“Main.storyboard”替换为“Main”。
  • 现在崩溃已解决,但应用程序未导航到下一个 ViewController。可能的原因是什么。
  • 其实我是 IOS 的新手,我必须在 Objective-C 中实现它。
  • 为什么需要像这样从 appdelegate 导航。如果您需要在启动应用程序后将 MultipleMarkersViewController 显示为第一个视图控制器。然后你可以通过设置为初始视图控制器来轻松地做到这一点。或者如果你想从 rootviewcotnroller 导航,那么首先检查根视图控制器是否有 UInavigationcontroller。
  • 非常感谢!问题已解决。

标签: ios objective-c uinavigationcontroller storyboard


【解决方案1】:

这是我经过 24 小时的斗争后解决问题的方法。我唯一尝试的是“Used Try Catch Block”,错误是我没有使用导致空指针异常的正确标识符名称。 代码如下:

@try {
                UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
                MultipleMarkersVC *vc = [sb instantiateViewControllerWithIdentifier:@"MultipleMarkersVC"];
                UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:vc];
                [self.window.rootViewController presentViewController:navCon animated:YES completion:nil];
            }
            @catch (NSException * e) {
                NSLog(@"Exception: %@", e);
            }

【讨论】:

    【解决方案2】:

    当您加载故事板时,无需在其名称中添加扩展名“.storyboard”。 所以,请使用以下内容:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    

    关于您的最后一行,如果您从 [AppDelegate didFinishLaunchingWithOptions] 加载视图,我更愿意使用以下行:

    [self.window setRootViewController: wc]
    

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多