EXC_BAD_ACCESS在发布但不是调试

ste*_*ris 2 release exc-bad-access uinavigationcontroller swift

我的产品在从xcode到模拟器和设备的调试中运行良好,但在归档和提交时没有运行.我将我的计划改为以释放方式运行,果然,它崩溃了.

下面的代码部分在该var homeNav行上生成EXC_BAD_ACCESS错误.此方法位于自定义TabBar控制器中.我还在下面包含了app委托调用,因为这是创建和显示tabcontroller的地方.

标签控制器调用:

//Sets up view on load
    override func viewDidLoad() {
        super.viewDidLoad()

        //Setup and add home view
        var homeNav = CMSSNavigationController(navigationBarClass:CMSSNavigationBar.self, toolbarClass:nil)
        homeNav.viewControllers.append(CMSSHomeController(nibName:XIBS.VIEW_HOME, bundle:nil))
        homeNav.tabBarItem.image = UIImage(named:Images.TAB_HOME)
        homeNav.edgesForExtendedLayout = UIRectEdge.None

        //Setup and add profile view
        var profileNav = CMSSNavigationController(navigationBarClass:CMSSNavigationBar.self, toolbarClass:nil)

        profileNav.viewControllers.append(CMSSProfileController(nibName:XIBS.VIEW_PROFILE, bundle:nil))
        profileNav.tabBarItem.image = UIImage(named:Images.TAB_PROFILE)
        profileNav.edgesForExtendedLayout = UIRectEdge.None

        //Set tabs
        self.viewControllers = NSArray(objects: homeNav, profileNav)

    }
Run Code Online (Sandbox Code Playgroud)

App代表致电:

 //Handles events after launch
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        //Setup Google Analytics
        GAI.sharedInstance().trackUncaughtExceptions = true
        GAI.sharedInstance().dispatchInterval = 20
        //TODO: Set logging level for analytics
        GAI.sharedInstance().trackerWithTrackingId(GoogleAnalytics.TRACKING_ID)

        //Set Window
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        //Create root tab controller
        var rootControl = CMSSTabBarController()
        self.window?.rootViewController = rootControl
        self.window?.makeKeyAndVisible();

        return true
    }
Run Code Online (Sandbox Code Playgroud)

如果所有UINavigationControllers都声明为CMSSNavigationController()不提供CMSSNavigationBar,则代码在发布时运行良好.

为什么这样的事情会在发布中发生,而不是调试?我看到无处可指示此处没有正确分配对象或引用.

ste*_*ris 5

问题是UINavigationController的构造函数中的工具栏类不能为nil.但是,编译器不会抱怨这一点.而且,虽然我不能说为什么,调试将允许它运行正常,但发布不会.

使用这条线

var homeNav = CMSSNavigationController(navigationBarClass:CMSSNavigationBar.self, toolbarClass:UIToolbar.self)
Run Code Online (Sandbox Code Playgroud)

完全解决了这个问题.