致命异常:使用格式化程序将字符串转换为日期时出现 NSInternalInconsistencyException
Fatal Exception: NSInternalInconsistencyException while using formatter to convert string to date
我在使用 ISO8601DateFormatter 和 formatOptions .withFractionalSeconds
解析这样的字符串时收到 Crashlytics 崩溃报告
2017-01-23T10:12:31Z
or
2017-01-23T10:12:31.484Z
or
2017-01-23T10:12:31.484221Z
到目前为止,此代码:
if #available(iOS 11.0, *) {
let formatter = ISO8601DateFormatter()
formatter.formatOptions.insert(.withFractionalSeconds)
result = formatter.date(from: string)
}
我收到的崩溃消息是:
Fatal Exception: NSInternalInconsistencyException
Invalid parameter not satisfying: formatOptions == 0 || !(formatOptions & ~(NSISO8601DateFormatWithYear | NSISO8601DateFormatWithMonth | NSISO8601DateFormatWithWeekOfYear | NSISO8601DateFormatWithDay | NSISO8601DateFormatWithTime | NSISO8601DateFormatWithTimeZone | NSISO8601DateFormatWithSpaceBetweenDateAndTime | NSISO8601DateFormatWithDashSeparatorInDate | NSISO8601DateFormatWithColonSeparatorInTime | NSISO8601DateFormatWithColonSeparatorInTimeZone | NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithInternetDateTime))
这个崩溃似乎是由 iOS 11.0.* 和 11.1.*.
中的选项 .withFractionalSeconds
引起的
要解决此问题,您应该将 #available(iOS 11.0, *)
更改为 #available(iOS 11.2, *)
更多详情:
尽管结构 ISO8601DateFormatter.Options
从 iOS 10.0+ 开始可用,并且选项本身 static var withFractionalSeconds: ISO8601DateFormatter.Options { get }
从 iOS 11.0+ 开始可用。 Read Here and Here
使用选项 .withFractionalSeconds "crashes up to 11.2. it is fixed in 11.2+"。
关于这个
要从 String
获取 Date
实例,请尝试使用 DateFormatter
的 dateFormat
,即
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)
我在使用 ISO8601DateFormatter 和 formatOptions .withFractionalSeconds
解析这样的字符串时收到 Crashlytics 崩溃报告
2017-01-23T10:12:31Z
or
2017-01-23T10:12:31.484Z
or
2017-01-23T10:12:31.484221Z
到目前为止,此代码:
if #available(iOS 11.0, *) {
let formatter = ISO8601DateFormatter()
formatter.formatOptions.insert(.withFractionalSeconds)
result = formatter.date(from: string)
}
我收到的崩溃消息是:
Fatal Exception: NSInternalInconsistencyException
Invalid parameter not satisfying: formatOptions == 0 || !(formatOptions & ~(NSISO8601DateFormatWithYear | NSISO8601DateFormatWithMonth | NSISO8601DateFormatWithWeekOfYear | NSISO8601DateFormatWithDay | NSISO8601DateFormatWithTime | NSISO8601DateFormatWithTimeZone | NSISO8601DateFormatWithSpaceBetweenDateAndTime | NSISO8601DateFormatWithDashSeparatorInDate | NSISO8601DateFormatWithColonSeparatorInTime | NSISO8601DateFormatWithColonSeparatorInTimeZone | NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithInternetDateTime))
这个崩溃似乎是由 iOS 11.0.* 和 11.1.*.
中的选项.withFractionalSeconds
引起的
要解决此问题,您应该将 #available(iOS 11.0, *)
更改为 #available(iOS 11.2, *)
更多详情:
尽管结构 ISO8601DateFormatter.Options
从 iOS 10.0+ 开始可用,并且选项本身 static var withFractionalSeconds: ISO8601DateFormatter.Options { get }
从 iOS 11.0+ 开始可用。 Read Here and Here
使用选项 .withFractionalSeconds "crashes up to 11.2. it is fixed in 11.2+"。
关于这个
要从 String
获取 Date
实例,请尝试使用 DateFormatter
的 dateFormat
,即
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)