Swift中的简单Date()操作崩溃



我从苹果公司收到了越来越多的崩溃报告(全部在iPhone 5、iOS 10.3.3上(,代码如下:

let date = NSDate()
var dateComponents = DateComponents()
dateComponents.hour = -6
let calculatedDate = NSCalendar.current.date(byAdding: dateComponents, to: date as Date)
let selectStatement = "SELECT nr from info where date > (UInt((calculatedDate!.timeIntervalSince1970)) * 1000);"

崩溃报告将最后一行列为问题行。看来,calculatedDate并没有被实例化。

在以前的版本中,第一行(iPhone 5,iOS 10.3.2(甚至发生了崩溃

我自己无法在iPhone 6s上重现这些崩溃。

有什么建议可以在这些声明中出错吗?

问题是iPhone 5是一个32位设备,并且会出现Integer溢出。将结果显式转换为Int32时,请参阅此处的错误。

如果您的select语句确实需要一个整数值,请使用UInt64而不是UInt来解决32位设备上的溢出问题。

与此问题无关,但当您只能使用本机Swift类型(DateCalendar(时,不鼓励将Foundation类型与本机Swi夫特类型混合使用。

明确显示问题的代码:

import Foundation
let date = Date()
var dateComponents = DateComponents()
dateComponents.hour = -6
let calculatedDate = Calendar.current.date(byAdding: dateComponents, to: date)
let selectStatement = "SELECT nr from info where date > (UInt((calculatedDate!.timeIntervalSince1970)) * 1000);"
print(selectStatement) //prints 1504234558000
print(Int32(1504234558000))

第9行第7列错误:从"Int"转换为"Int32"时整数溢出打印(国际32(1504234558000((

使用Date((而不是NSDate((&日历而不是NSCalendar。

let date = Date()
var dateComponents = DateComponents()
dateComponents.hour = -6
if let calculatedDate = Calendar.current.date(byAdding: dateComponents, to: date) {
let selectStatement = "SELECT nr from info where date > (UInt((calculatedDate.timeIntervalSince1970)) * 1000);"
}

相关内容

  • 没有找到相关文章

最新更新