2016-12-02 3 views
0

Я создал класс, который имеет объект NSDate, который создается из значения в JSON. Строковое значение похоже на: 2016-12-02T13:51:23+01:00. В большинстве случаев строка успешно конвертируется и создается объект даты, но при запуске приложения SOMETIMES при попытке принудительного развертывания на необязательное значение я не знаю, где. Линия кода, которая иногда терпит неудачу:NSDate formatString иногда возвращает nil

self.creationMoment = stringDateFromJson == nil ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ") 

Есть ли у кого-нибудь идеи?

+2

Можете ли вы показать строку, которая не могут быть преобразованы в дату? –

+0

Вам нужно предоставить намного больше деталей. Какая строка кода вызывает ошибку? Обновите свой вопрос с помощью более релевантного кода и укажите конкретные примеры, которые не выполняются. – rmaddy

+0

Неверная строка кода - это тот, который я опубликовал с точно значением, которое я написал. Пример, который я вам даю, является одним из реальных случаев. –

ответ

0

Я повторно объявлен в creationMoment переменную как Swift Date вместо NSDate и эту проблему никогда не появляются снова, это может быть ошибка Apple, ...

0

Возможно ли, что ваш объект относится к классу NSNull? в этом случае вы можете использовать:

self.creationMoment = stringDateFromJson.isKind(of: NSNull) ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ") 
+0

Это не может быть проблемой, потому что если 'stringDateFromJson' на самом деле был' NSNull', тогда код сработает, если будет отличаться. – rmaddy

0

Я считаю, что ваш stringDateFromJson иногда может быть пустым. Поэтому == nil будет ложным, и при попытке создать NSDate с пустой строкой возвращается nil. Попробуйте изменить свой код, чтобы что-то ложь это let isNotValidStringDate = stringDateFromJson == nil || stringDateFromJson.isEmpty self.creationMoment = isNotValidStringDate ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssh")

+0

пример в вопросе с датой «2016-12-02T13: 51: 23 + 01: 00» был реальным случаем: когда приложение разбилось, я смотрю в jsonDateString, и я нашел эту строку, поэтому она не была пустой. Кроме того, дата json никогда не пуста из-за исходной даты автогенерации в момент создания объекта ... –

Смежные вопросы