2015-03-29 4 views
-1

Мое приложение прекрасно работало до смены часов сегодня утром. Я установил часовой пояс пользователя, используя следующий код.Проблемы с часовым поясом пользователя

let usersTimeZone: String = ltzAbbrev() 
var gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSISO8601Calendar)! 
gregorian.timeZone = NSTimeZone(abbreviation: usersTimeZone)! 

код работал выше, пока часы не шли вперед утром и теперь ltzAbbrev() возвращается GMT+1 и это вызывает мою программу к аварийному со стандартной ошибкой

fatal error: unexpectedly found nil while unwrapping an Optional value

ответ

3

кажется, что вы используете функция

func ltzAbbrev() -> String { return NSTimeZone.localTimeZone().abbreviation! } 

от https://stackoverflow.com/a/27053592/1187415. Так с

let usersTimeZone:String = ltzAbbrev() 
gregorian.timeZone = NSTimeZone(abbreviation: usersTimeZone)! 

вы делаете два преобразования

time zone -> abbreviation -> time zone 

и что не работает надежно, как указано в NSTimeZone документации:

In general, you are discouraged from using abbreviations except for unique instances such as “UTC” or “GMT”. Time Zone abbreviations are not standardized and so a given abbreviation may have multiple meanings—for example, “EST” refers to Eastern Time in both the United States and Australia

Это тоже не нужно, т.к. вы можете просто установить

gregorian.timeZone = NSTimeZone.localTimeZone() 

вместо.

Другой (не связанный) проблема может быть использование NSISO8601Calendar, в документации NSLocale говорится

Identifier for the ISO8601. The ISO8601 calendar is not yet implemented.

Григорианский календарь, полученный с

let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
Смежные вопросы