我正在使用Swift语言开发iOS应用程序,该应用程序因非常模糊的错误消息而崩溃。
首先,一点上下文:我有一个自定义类Order
,NSManagedObject
的子类,我正在使用CoreData进行数据存储。 Order
有很多字段,但其中有两个是deliveryDate
和cCommissionDate
。
我有一个带有四个Tabs的TabController,用于显示所有订单信息。在第一个标签中,有许多TextField
个,其中两个是deliveryDateText
和cCommissionDateText
。这两者完全相同。
好的,我在选项卡的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之间,但最奇怪的是这两个变量以相同的方式处理,但是一个使应用程序崩溃而另一个是正常的!
提前致谢,对不起,我很抱歉!