【发布时间】:2018-04-11 01:22:57
【问题描述】:
我有以下代码适用于 iOS 8.0+ 到 iOS 10.3,但在 iOS 11.0+ 上崩溃,我无法理解原因
代码:
alertcontrol.addTextFieldWithConfigurationHandler({ (textField) -> Void in
textField.font = UIFont.systemFontOfSize(14)
textField.placeholder = "Type Date as dd-mm-yyyy"
let endate = endDate.formatedDate("dd-MM-yyyy")
textField.text = endate
textField.textAlignment = .Left
})
此代码在 iOS 11.0+ 中的 textField.text 处生成崩溃,但相同的代码适用于 iOS 8.0+ 到 iOS 10.3 同样这里 endate 总是有一个字符串输出。
崩溃输出:
libc++abi.dylib:以 NSException 类型的未捕获异常终止
对于 endDate 上的代码 在 NSDate 扩展内
func formatedDate(format:String)-> String
{
let formatter = NSDateFormatter()
formatter.dateFormat = format
return formatter.stringFromDate(self)
}
输出
“2017 年 27 月 10 日”
【问题讨论】:
-
日志是否给出了异常的原因?还要检查您的警报控制器首选样式属性是否设置为“警报”
-
let endate = endDate.formatedDate("dd-MM-yyyy")的这一行是什么可能会在日期格式无效时导致崩溃,放置异常断点 -
如何获得这个:
let endate = endDate.formatedDate("dd-MM-yyyy")? -
endate 没有任何崩溃,当我 print(endDate.formatedDate("dd-MM-yyyy")) 它给我日志输出,所以,我肯定知道它包含一个值