3

我有这个带有可空初始化的 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 的扩展?

4

1 回答 1

1

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

有关潜在问题的更多信息,请参阅SR-704: EXC_BAD_ACCESS on return nil from a failable initializer of NSObject subclass。看起来它已在主线分支中修复,但没有进入最终的 Swift 2.2 版本。预计它会在下一次更新中得到修复。

于 2016-03-24T16:43:20.397 回答