EXC_BAD_ACCESS在发布但不是调试

时间:2014-11-18 19:22:49

标签: swift uinavigationcontroller release exc-bad-access

我的产品在从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)

    }

App Delegate call:

 //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
    }

如果所有UINavigationControllers都声明为CMSSNavigationController()而没有提供CMSSNavigationBar,则代码在发行版中运行良好。

为什么会在发布时出现这种情况,但不会调试?我看不到任何地方表明这里没有正确分配对象或引用。

1 个答案:

答案 0 :(得分:5)

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

使用

var homeNav = CMSSNavigationController(navigationBarClass:CMSSNavigationBar.self, toolbarClass:UIToolbar.self)

完全解决了这个问题。

相关问题