Неустранимое исключение: NSInternalInconsistencyException при использовании форматера для преобразования строки в дату - PullRequest
0 голосов
/ 24 января 2020

Я получаю отчеты Crashlytics cra sh при использовании ISO8601DateFormatter с formatOptions .withFractionalSeconds для разбора строк, подобных этому

2017-01-23T10: 12: 31Z

или

2017-01-23T10: 12: 31,484Z

или

2017-01-23T10: 12: 31,484221Z

на сегодняшний день с этим кодом:

if #available(iOS 11.0, *) {
  let formatter = ISO8601DateFormatter()
  formatter.formatOptions.insert(.withFractionalSeconds)
  result = formatter.date(from: string)
}

полученное сообщение cra sh:

Неустранимое исключение: NSInternalInconsistencyException

Недопустимый параметр не удовлетворяет : formatOptions == 0 || ! (FormatOptions & ~ (NSISO8601DateFormatWithYear | NSISO8601DateFormatWithMonth | NSISO8601DateFormatWithWeekOfYear | NSISO8601DateFormatWithDay | NSISO8601DateFormatWithTime | NSISO8601DateFormatWithTimeZone | NSISO8601DateFormatWithSpaceBetweenDateAndTime | NSISO8601DateFormatWithDashSeparatorInDate | NSISO8601DateFormatWithColonSeparatorInTime | NSISO8601DateFormatWithColonSeparatorInTimeZone | NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithInternetDateTime))

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Чтобы получить экземпляр Date из String, попробуйте использовать dateFormat из DateFormatter, т.е.

let str = "2017-01-23T10:12:31.484Z"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyy-mm-dd'T'hh:mm:ss.SSSZ"
let date = dateFormatter.date(from: str)
print(date)
0 голосов
/ 24 января 2020

Похоже, что этот cra sh вызван опцией .withFractionalSeconds в iOS 11.0. * И 11.1. *.

. Чтобы исправить это, вы должны изменить #available(iOS 11.0, *) на #available(iOS 11.2, *)

Подробнее:

Хотя структура ISO8601DateFormatter.Options доступна с iOS 10.0+, а сама опция static var withFractionalSeconds: ISO8601DateFormatter.Options { get } доступна с iOS 11.0+. Читать здесь и Здесь

При использовании опции .withFractionalSeconds "происходит сбой до 11.2. Это исправлено в 11.2+". относительно этого комментария

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...