iOS应用程序进入黑屏

时间:2016-03-07 17:10:08

标签: ios swift storyboard xcode7

我在Swift应用程序中使用Launch Screen故事板以及主故事板。有时,应用程序将显示启动故事板,然后转到黑屏。其他时候它正确地进入主故事板入口点。它几乎看起来像依赖于构建,如果我清理并重建几次,那么构建弹出行为正常。可能导致这种情况的任何想法?

添加一些说明:

  • SplashScreen.storyboard在目标设置中设置(好问题)。
  • 在真实设备和模拟器中都会发生这种情况,但并非总是如此。
  • 我在这个阶段没有做任何联网(同步或其他)
  • 停电似乎只在转换到一个特定视图时才会发生
  • 视图的viewWillDisplay等代码即使在黑屏时执行,也没有显示任何可见

这可能有所帮助:我在违规视图中输入以下代码:

override func viewDidAppear(animated: Bool) {
    print(self.view.layer.bounds.width);
    print(self.view.layer.bounds.height);

}

当出现黑屏问题时,我得到260和17.当视图正确显示时,我得到320和568的5s(模拟器)尺寸。这有助于任何人帮助我吗?

5 个答案:

答案 0 :(得分:14)

我终于解决了这个问题。经过数周的争斗并尝试从我的所有代码中删除所有代码后,事实证明,我在故事板中查看的视图出口已经与两个" View"和该视图中的一个文本字段。像这样:

enter image description here

我已删除了与文本字段的链接,但在此处显示正确的链接:

enter image description here

有趣的是,我无法在UI中重现这种意外连接,所以我不确定这是怎么发生的。无论如何,我希望这有助于其他可能遇到这种情况的人。

答案 1 :(得分:2)

我说问题就在这一行:

    dispatch_async(dispatch_get_main_queue(), {
        self.performSegueWithIdentifier("toWelcomeView", sender: self);
    });

在此视图尚未显示时,您尝试对其他视图执行segue(视图出现)。那是非常不确定的,这就是为什么有时它实际上是失败的。我有点惊讶你没有报告在控制台中看到一条错误消息警告你正试图从视图控制器中查看尚未出现的视图控制器。

作为一项临时措施,您可以将来电self.RetrieveRegistration()移至viewDidAppear:,看看是否有帮助。

但从长远来看,你只是以错误的方式解决这个问题。您的目标似乎是在某些情况下启动到一个视图控制器,在其他情况下启动到另一个视图控制器。放置所有逻辑的地方在applicationDidFinishLaunching之前,因此rootViewController本身会因情况而异。

例如,想象一下以下非常简单的情况:我们的故事板只包含两个视图控制器,RegistrationViewController和RootViewController(带有故事板标识符"root"),从第一个到第二个显示segue。在RegistrationViewController中,我们要求注册信息,例如我们放在NSUserDefaults中的"username"。然后我们转到RootViewController。一切都很好,但我们的目标是用户永远不会再看到RegistrationViewController 。这很容易在app delegate中处理:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    if let rvc = self.window?.rootViewController {
        if NSUserDefaults.standardUserDefaults().objectForKey("username") as? String != nil {
            self.window!.rootViewController = rvc.storyboard!.instantiateViewControllerWithIdentifier("root")
        }
    }
    return true
}

答案 2 :(得分:2)

我的设备遇到了同样的问题。我设法通过xcode设置应用程序的主界面来修复它: MyApplication 主界面LaunchScreen.storyboard(或Main.storyboard

enter image description here

干杯! :)

答案 3 :(得分:1)

确保您的第一个View Controller(在我的情况下为Navigation Controller)是Initial Controller。 Find more details here

此外,请确保在使用Segue连接初始控制器和第二控制器时,按“ Root View Controller”关系as you can see on picture here

希望对您有帮助!

答案 4 :(得分:0)

我通过将此属性-值对添加到 Info.plistApplication Scene ManifestScene Configuration → {{1} 内的值数组中的 Application Session Role 文件来解决此问题}.

Item 0 (Default Configuration)

默认情况下,上面的值实际上存在于 <key>UISceneStoryboardFile</key> <string>Main</string> 中,我前段时间不小心删除了它。