在iPhone 6上更改为24小时制,iOS 9会导致应用程序崩溃

时间:2015-12-16 13:29:15

标签: ios swift nsdateformatter

我开发了一个应用程序,其中我使用单例来保存NSDateFormatter的单个实例。

我的日期格式化程序初始化如下:

timeDateFormatter = NSDateFormatter()
timeDateFormatter.locale = NSLocale(localeIdentifier:EN_US_POSIX_LocaleIdentifier)
timeDateFormatter.dateFormat = StringDateType.DetailSigningHour.rawValue
let EN_US_POSIX_LocaleIdentifier = "en_US_POSIX"

关闭24小时制,应用程序按原样运行,但在进入设置 - >常规 - >日期&时间并打开24小时制时,然后点击应用程序图标,该应用程序尝试上升,然后立即退出。

我读到这对Apple来说可能是个未知问题。

你能帮我详细了解一下吗?

更新

当系统时间从12小时格式更改为24小时格式时,我的日期格式化程序搞砸了。

好的部分是系统正在发送通知(NSCurrentLocaleDidChangeNotification),让您知道语言环境已更改。我所做的就是为此通知添加一个观察者并重新初始化我的日期格式化程序。

将区域设置设置为en_US_POSIX,无论用户的24/12小时模式设置如何,都会强制执行12小时模式。

2 个答案:

答案 0 :(得分:3)

我将假设您强行展开timeDateFormatter.dateFromString的日期格式错误的结果。

如果您这样做:

let timeDateFormatter = NSDateFormatter()
timeDateFormatter.locale = NSLocale(localeIdentifier:"en_US_POSIX")
timeDateFormatter.dateFormat = "hh:mm"

强行打开结果:

let d = timeDateFormatter.dateFromString("11:42")!

如果日期字符串超过12小时,您将在运行时崩溃:

let d = timeDateFormatter.dateFromString("13:42")!  // crash

因为"hh:mm"仅处理12h格式。

要使用24小时格式,您应该使用"HH:mm"

timeDateFormatter.dateFormat = "HH:mm"

为避免崩溃,请避免强行展开:

if let d = timeDateFormatter.dateFromString("11:42") {
    print(d)
} else {
    // oops
}

如果我的诊断错误,请在问题中添加详细信息。 :)

答案 1 :(得分:0)

我不知道这个问题,但是我总是这样使用格式化程序,也许这对你来说也很方便。

let formatter = NSDateFormatter()
formatter.timeStyle = NSDateFormatterStyle.ShortStyle // here are different values possible, and all are good declared.
formatter.dateStyle = .MediumStyle // Same possible values like in timeStyle.