Новый Xcode 7.3: расширение Swift NSDate с нулевым удобством инициализации аварийно завершает работу EXC_BAD_ACCESS
У меня есть это расширение NSDate с nullable init, которое работало нормально все время, пока я не обновился до недавно выпущенного 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 ответ
Как уже упоминал dan в своем комментарии, всегда нужно инициализировать объект перед возвратом. nil
из сбойного инициализатора (или броска из инициализатора броска) исправляет эту проблему.
Для получения дополнительной информации о лежащей в основе проблеме см. SR-704: EXC_BAD_ACCESS о возврате nil из сбойного инициализатора подкласса NSObject. Похоже, это было исправлено в основной ветке, но не вошло в финальную версию Swift 2.2. Ожидайте, что это будет исправлено в следующем обновлении пункта.