我有这个带有可为空初始化的 NSDate 扩展,它一直运行良好,直到我更新到新发布的 Xcode 7.3。
现在它因 EXC_BAD_ACCESS 而崩溃。
extension NSDate
{
convenience init?(dateString:String, formatString:String?)
{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = formatString
let newDate:NSDate? = dateFormatter.dateFromString(dateString)
if let newNewDate = newDate
{
self.init(timeInterval:0, sinceDate:newNewDate)
return
}
print("ERROR: Wrong format [\(formatString)] for date [\(dateString)]")
return nil
}
}
let d1 = NSDate(dateString: "2016-01-01 11:00:00", formatString: "yyyy-MM-dd hh:mm:ss") // OK
let d2 = NSDate(dateString: "qq123", formatString: "qwe") // EXC_BAD_ACCESS
您对此有任何可能的解决方案吗? 无法弄清楚 - 我是否以某种方式滥用了 NSDate 的扩展?
最佳答案
作为dan在他的评论中已经提到,确保始终在从可失败初始化程序返回 nil 之前初始化对象(或从可抛出的初始化程序中抛出)修复了这个问题。
有关潜在问题的更多信息,请参阅 SR-704: EXC_BAD_ACCESS on returning nil from a failable initializer of NSObject subclass .看起来它已在主线分支中修复,但没有进入最终的 Swift 2.2 版本。期待在下一次点更新中修复。
关于ios - 新 Xcode 7.3 : Swift NSDate extension with nullable convenience init crashes EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36189714/