pushViewController:在SWIFT中展开Optional值时意外发现nil

时间:2016-08-24 08:56:20

标签: swift uinavigationcontroller swift2

我已经为iPhone开发了一个应用程序,我想在iPad上继续使用这个应用程序,iPad的界面与iPhone不一样,我正在为iPad开发界面,我有一个问题就是将uiviewcontroller传递给另一个uiviewcontroller。

我在函数func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool中检测到这样的设备

if( (modelName == "iPad 2")||(modelName == "iPad 3")||(modelName == "iPad 4")||(modelName == "iPad Air")||(modelName == "iPad Air 2")||(modelName == "iPad Mini")||(modelName == "iPad Mini 2")||(modelName == "iPad Mini 3")||(modelName == "iPad Mini 4")||(modelName == "iPad Pro"))
    {
        ...
    }else
    {
        ...
    }

创建两个视图(视图A和视图B)后,我将两个导航控制器嵌入到两个视图中。

在视图A中,我添加此代码以传递视图B,

let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("viewBID") as! ViewBViewController

self.navigationController!.pushViewController(secondViewController, animated: true)

我在iPhone中做了同样的事情,但效果很好,但是对于iPad,我会得到像unexpectedly found nil while unwrapping an Optional value

这样的错误

我不知道为什么,我在视图控制器中嵌入了导航控制器,所以我认为self.navigationController不是null。你知道如何解决这个问题吗?非常感谢你。

PS:我想也许我没有使用正确的方式来分离iPhone和iPad界面,但我不确定这个......我需要你的帮助,非常感谢你。 enter image description here

1 个答案:

答案 0 :(得分:0)

尝试使用大小类。您不必使用代码来检测设备。使用尺寸等级,您可以使用不同的iPad界面,纵向iPhone和横向iPhone或仅适用于iPhone 6s plus。

Xcode中小于8的大小类看起来像here to select them

在这里选择您的设备。

and then select device

我建议下载Xcode 8 beta,因为它们在Xcode 8中略有不同,但原理相同。

您可以在Xcode中搜索有关大小类的一些教程。