我有这个带有nullable init的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的延伸?
答案 0 :(得分:1)
正如他在评论中提到的那样dan,确保在从可用的初始化程序返回nil
之前始终初始化对象(或从抛出的初始化程序中抛出)可以解决此问题。
有关基础问题的详细信息,请参阅SR-704: EXC_BAD_ACCESS on returning nil from a failable initializer of NSObject subclass。看起来它已在主线分支中修复,但没有进入最终的Swift 2.2版本。期望在下一次更新中修复它。