新的Xcode 7.3:具有可空便利性的Swift NSDate扩展init崩溃了EXC_BAD_ACCESS

时间:2016-03-23 22:14:10

标签: ios swift nsdate convenience-methods xcode7.3

我有这个带有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的延伸?

1 个答案:

答案 0 :(得分:1)

正如他在评论中提到的那样dan,确保在从可用的初始化程序返回nil之前始终初始化对象(或从抛出的初始化程序中抛出)可以解决此问题。

有关基础问题的详细信息,请参阅SR-704: EXC_BAD_ACCESS on returning nil from a failable initializer of NSObject subclass。看起来它已在主线分支中修复,但没有进入最终的Swift 2.2版本。期望在下一次更新中修复它。