Новый 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. Ожидайте, что это будет исправлено в следующем обновлении пункта.

Другие вопросы по тегам