NSDate使ViewWillAppear()和ViewDidAppear()之间的应用程序崩溃

时间:2015-06-08 10:26:51

标签: ios swift nsdate viewwillappear viewdidappear

我正在使用Swift语言开发iOS应用程序,该应用程序因非常模糊的错误消息而崩溃。

首先,一点上下文:我有一个自定义类OrderNSManagedObject的子类,我正在使用CoreData进行数据存储。 Order有很多字段,但其中有两个是deliveryDatecCommissionDate

我有一个带有四个Tabs的TabController,用于显示所有订单信息。在第一个标签中,有许多TextField个,其中两个是deliveryDateTextcCommissionDateText。这两者完全相同。

好的,我在选项卡的ViewWillAppear方法中填充了这些字段:

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
if let controller = self.parentViewController as? OrderDetailTabBarController {

            let order = getOrder()!

            [...]

            fillText(orderDateText,       order.date)
            fillText(deliveryDateText,    order.deliveryDate)
            fillText(cCommissionDateText, order.copyCommissionDate)
            fillText(sealDateText,        order.sealDate)
            fillText(pricelistText,       order.priceGroup)

[...]
}

其中fillText()是这样的:

func fillText(textfield: UITextField!, value: NSDate?, altValue: String = "", prefix: String = ""){
    if let date = value {
        var formatter : NSDateFormatter = dateFormatter // That's a global variable
        if value != nil {
            textfield.text = prefix + formatter.stringFromDate(date)
        }
        else{
            textfield.text = altValue
        }
    } else {
        textfield.text = altValue
    }
}

当我启动应用程序并转到该选项卡时,viewWillAppear被完全计算:deliveryDate和cCommissionDate都不是nil(它们都是June六,但它们是两个不同的实例),但是在viewWillAppear之后和viewDidAppear之前应用程序崩溃... AppDelegate的声明!

它只显示EXC_BAD_ACCESS code 1,并且启用NSZombies时会显示[__NSDate release]: message sent to deallocated instance 0x7fc0c8a0

有很多奇怪的事情:当应用程序崩溃时,我可以看到模拟器上的最后一个视图,这是编译的选项卡。它与每个日期一起编译,包括cCommission和deliveryDate,六月六日。但是,调试器无法访问ViewDidAppear。

如果我评论fillText(cCommissionDateText, order.copyCommissionDate)行,一切正常。

我只在Textfield OnTouch监听器中触摸cCommissionDate和deliveryDate,此时我从未到达过该部分代码。

那么问题是什么呢?错误介于willAppear和didAppear之间,但最奇怪的是这两个变量以相同的方式处理,但是一个使应用程序崩溃而另一个是正常的!

提前致谢,对不起,我很抱歉!

0 个答案:

没有答案