【问题标题】:Change initial View Controller of Master-Detail-Application更改 Master-Detail-Application 的初始 View Controller
【发布时间】:2013-02-11 23:28:22
【问题描述】:

我在 Master-Detail-Application 上创建了一个新的 iPhone 项目。因为我之前需要登录,所以我在 storyboard 中添加了一个新的 ViewController,勾选了“is initial View Controller”并分配了新创建的 class LoginViewController 到这个 ViewController。

此外但不相关(在我看来),我创建了一个 segue 并将其从 ViewController 连接到 NavigationController(Master-Detail-Template 的)。

AppDelegate.m 已更改为在启动时启动新控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    /* // Old Master-Detail-View-Controller
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
     */

    (LoginViewController *)self.window.rootViewController;

    return YES;
}

这将导致错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '-[UICollectionViewController loadView] loaded the "Qn5-Rj-iPA-view-IRE-eP
-ILZ" nib but didn't get a UICollectionView.'

我也试过这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    LoginViewController *loginViewController = [[LoginViewController alloc] init];

    self.window.rootViewController = loginViewController;   //Set the view controller
    [self.window makeKeyAndVisible];

    return YES;
}

导致类似错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'UICollectionView must be initialized with a non-nil layout parameter'

我的错误在哪里?

我不明白的是,错误消息中的 UICollectionView 到底是从哪里来的。我从来没有创建或添加一个??

【问题讨论】:

    标签: ios storyboard viewcontroller launch master-detail


    【解决方案1】:

    我的LoginViewController 错误地继承了UICollectionViewController 而不是UIViewController。我修复了它并且它有效。

    这解释了我一开始不理解的奇怪的错误消息。一如既往真相在源代码中。复查有帮助。

    【讨论】:

      【解决方案2】:

      您无需执行任何操作即可在 AppDelegate 中加载视图控制器。只要您的 stroyboard 是在项目设置中加载的,它应该会自动加载。

      【讨论】:

      • 我也试过了,但这也会引发错误。由于代码期望 topViewController 而新的 viewController 不是 - 请参阅 didFinishLaunchingWithOptions 中的第一条注释。我也只尝试了 return YES;,但这并没有奏效。将重新检查。
      • 除了进行修复之外,我还必须从didFinishLaunchingWithOptionsreturn YES; 中删除所有内容。现在它可以工作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多