Строка преобразования в NSDate — Фатальная ошибка: Неожиданно найдено ноль при развертывании необязательного значения

#swift #string #nsdate

Вопрос:

Что случилось? Тот же код работает и для других классов. Когда я преобразую строку в nsdate, симулятор вылетает.

 let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEE, dd/MM/yyyy (HH:mm)"
        
        
        //ordino il file 
        var dataminima = dateFormatter.date(from: "lun, 01/01/2010 (01:01)")
        var datamassima = dateFormatter.date(from: "lun, 01/01/2010 (01:01)")
        
        var indice = 0
        var indiceminimo = 1
        
        var indice1 = 0
        
        for data in arraycomplessivo {
            let validData = data as! NSDictionary
            let dataestratta = validData["data"]
            print(dataestratta as! String)
            
            //converto da stringa a NSDate - that's the error
            let dataconvertita = dateFormatter.date(from:dataestratta as! String)!
            
            //print(dataminima!)
            print(dataconvertita)
 

// данные: gio, 10/06/2021 (12:00)

введите описание изображения здесь

ошибка в консоли

Комментарии:

1. Зачем использовать NSDictionary , а не Dictionary ? То же самое относится и к NSMutableArray .

2. Каков результат print(dataestratta as! String) ? Вы используете слишком много восклицательных знаков, это приглашение «пожалуйста, разбейте меня». И не используйте NSDictionary/NSArray в Swift.

3. Прости, я пропустил это. Я просто редактирую пост. данные: gio, 10/06/2021 (12:00) Это правильно с форматом даты «EEE, дд/ММ/гггг (ЧЧ:мм)»

Ответ №1:

Языковой стандарт в симуляторе не обязательно совпадает с вашим устройством или компьютером Mac.

Поскольку формат даты строки, очевидно, итальянский, добавьте фиксированный язык

 dateFormatter.locale = Locale(identifier: "it_IT")
dateFormatter.dateFormat = "EEE, dd/MM/yyyy (HH:mm)"