*** 由于未捕获的异常 'NSGenericException' 而终止应用程序,原因:'Start date cannot be later in time than end date!'
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Start date cannot be later in time than end date!'
我正在使用 Alamofire,在模拟器上运行我的应用 运行 几个小时后,我遇到了崩溃并出现此错误。
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Start date cannot be later in time than end date!'
我在控制台中得到了这个堆栈跟踪:
*** First throw call stack:
(
0 CoreFoundation 0x0000000111186d4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x0000000110be821e objc_exception_throw + 48
2 Foundation 0x00000001107f0e3c -[_NSConcreteDateInterval dealloc] + 0
3 CFNetwork 0x00000001131a18e8 -[__NSCFURLSessionTaskMetrics _initWithTask:] + 868
4 CFNetwork 0x00000001131a1497 -[NSURLSessionTaskMetrics _initWithTask:] + 100
5 CFNetwork 0x0000000112f77bc7 -[__NSCFURLLocalSessionConnection _tick_finishing] + 351
6 libdispatch.dylib 0x00000001128e3978 _dispatch_call_block_and_release + 12
7 libdispatch.dylib 0x000000011290d0cd _dispatch_client_callout + 8
8 libdispatch.dylib 0x00000001128eae17 _dispatch_queue_serial_drain + 236
9 libdispatch.dylib 0x00000001128ebb4b _dispatch_queue_invoke + 1073
10 libdispatch.dylib 0x00000001128ee385 _dispatch_root_queue_drain + 720
11 libdispatch.dylib 0x00000001128ee059 _dispatch_worker_thread3 + 123
12 libsystem_pthread.dylib 0x0000000112cbc736 _pthread_wqthread + 1299
13 libsystem_pthread.dylib 0x0000000112cbc211 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
有人遇到过类似的崩溃吗?
谢谢
是的,我刚刚遇到了同样的崩溃。它发生在后台线程中,似乎与发出 URL 会话网络请求有关。我想知道这是否是某种多线程错误,与我同时发出两个网络请求有关。我也在使用 Alamofire,但不确定该错误是在 Alamofire 中还是在 Apple 的代码中。到目前为止,我一直无法重现它。也许您可以弄清楚如何重现它,然后在 Apple 的漏洞雷达或 Alamofire GitHub 存储库中提交问题。
我遇到了同样的崩溃,今天做了一些研究,发现了这个:
http://www.openradar.me/28301343
Apple 似乎在 iOS 10.2 中解决了这个问题。只是觉得它可能对你有帮助!
这是 Apple NSURLSessionTaskMetrics
代码中的一个错误,在网络请求期间发生,当用户的时钟向后移动得足够远以至于请求开始时间戳在请求结束时间戳之后。这可以使用网络调试代理和手动调整时钟来重现,并且只发生在 iOS 10.0 到但不包括 iOS 10.2
如果您使用的是 Alamofire,并且不需要 NSURLSessionTaskMetrics
,则可以通过为 SessionManager
使用自定义 SessionDelegate
并覆盖 responds(to aSelector..)
函数例如:
class MySessionDelegate: Alamofire.SessionDelegate {
override public func responds(to aSelector: Selector) -> Bool {
let result: Bool = super.responds(to: aSelector)
if #available(iOS 10.2, *) {
// NSURLSessionTaskMetrics date crash is fixed
return result
} else if #available(iOS 10.0, *) {
// NSURLSessionTaskMetrics date crash is not fixed, turn off metric collection
if aSelector == #selector(self.urlSession(_:task:didFinishCollecting:)) {
return false
} else {
return result
}
} else {
// NSURLSessionTaskMetrics doesn't exist
return result
}
}
}
如果您使用的是默认值 SessionManager
(例如调用 Alamofire.request(...)
),您可以创建自己的 SessionManager 以使用您的自定义 SessionDelegate
:
let sessionManager: Alamofire.SessionManager = {
let configuration: URLSessionConfiguration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(configuration: configuration, delegate: MySessionDelegate(), serverTrustPolicyManager: nil)
}()
现在不用调用 Alamofire.request(...)
你会调用 sessionManager.request(...)
过去几个月我一直在努力解决 os x 应用程序中的这个问题,并且找到了解决方法。
背景:
就像 OP 我使用 Alamofire 通过定时器请求 JSON 数据每秒发送几次请求。数据按预期进入,但我不定期地随机崩溃,并收到与 OP 相同的消息,即 开始日期不能晚于结束日期! 等等
解法:
我没有定期发送 Alamofire 请求,而是添加了一些逻辑,在发送下一个请求之前检查前一个请求的 return。这完全消除了随机崩溃。
希望对您有所帮助:)
@thierryb
我正在使用 Alamofire,在模拟器上运行我的应用 运行 几个小时后,我遇到了崩溃并出现此错误。
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Start date cannot be later in time than end date!'
我在控制台中得到了这个堆栈跟踪:
*** First throw call stack:
(
0 CoreFoundation 0x0000000111186d4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x0000000110be821e objc_exception_throw + 48
2 Foundation 0x00000001107f0e3c -[_NSConcreteDateInterval dealloc] + 0
3 CFNetwork 0x00000001131a18e8 -[__NSCFURLSessionTaskMetrics _initWithTask:] + 868
4 CFNetwork 0x00000001131a1497 -[NSURLSessionTaskMetrics _initWithTask:] + 100
5 CFNetwork 0x0000000112f77bc7 -[__NSCFURLLocalSessionConnection _tick_finishing] + 351
6 libdispatch.dylib 0x00000001128e3978 _dispatch_call_block_and_release + 12
7 libdispatch.dylib 0x000000011290d0cd _dispatch_client_callout + 8
8 libdispatch.dylib 0x00000001128eae17 _dispatch_queue_serial_drain + 236
9 libdispatch.dylib 0x00000001128ebb4b _dispatch_queue_invoke + 1073
10 libdispatch.dylib 0x00000001128ee385 _dispatch_root_queue_drain + 720
11 libdispatch.dylib 0x00000001128ee059 _dispatch_worker_thread3 + 123
12 libsystem_pthread.dylib 0x0000000112cbc736 _pthread_wqthread + 1299
13 libsystem_pthread.dylib 0x0000000112cbc211 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
有人遇到过类似的崩溃吗?
谢谢
是的,我刚刚遇到了同样的崩溃。它发生在后台线程中,似乎与发出 URL 会话网络请求有关。我想知道这是否是某种多线程错误,与我同时发出两个网络请求有关。我也在使用 Alamofire,但不确定该错误是在 Alamofire 中还是在 Apple 的代码中。到目前为止,我一直无法重现它。也许您可以弄清楚如何重现它,然后在 Apple 的漏洞雷达或 Alamofire GitHub 存储库中提交问题。
我遇到了同样的崩溃,今天做了一些研究,发现了这个:
http://www.openradar.me/28301343
Apple 似乎在 iOS 10.2 中解决了这个问题。只是觉得它可能对你有帮助!
这是 Apple NSURLSessionTaskMetrics
代码中的一个错误,在网络请求期间发生,当用户的时钟向后移动得足够远以至于请求开始时间戳在请求结束时间戳之后。这可以使用网络调试代理和手动调整时钟来重现,并且只发生在 iOS 10.0 到但不包括 iOS 10.2
如果您使用的是 Alamofire,并且不需要 NSURLSessionTaskMetrics
,则可以通过为 SessionManager
使用自定义 SessionDelegate
并覆盖 responds(to aSelector..)
函数例如:
class MySessionDelegate: Alamofire.SessionDelegate {
override public func responds(to aSelector: Selector) -> Bool {
let result: Bool = super.responds(to: aSelector)
if #available(iOS 10.2, *) {
// NSURLSessionTaskMetrics date crash is fixed
return result
} else if #available(iOS 10.0, *) {
// NSURLSessionTaskMetrics date crash is not fixed, turn off metric collection
if aSelector == #selector(self.urlSession(_:task:didFinishCollecting:)) {
return false
} else {
return result
}
} else {
// NSURLSessionTaskMetrics doesn't exist
return result
}
}
}
如果您使用的是默认值 SessionManager
(例如调用 Alamofire.request(...)
),您可以创建自己的 SessionManager 以使用您的自定义 SessionDelegate
:
let sessionManager: Alamofire.SessionManager = {
let configuration: URLSessionConfiguration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(configuration: configuration, delegate: MySessionDelegate(), serverTrustPolicyManager: nil)
}()
现在不用调用 Alamofire.request(...)
你会调用 sessionManager.request(...)
过去几个月我一直在努力解决 os x 应用程序中的这个问题,并且找到了解决方法。
背景: 就像 OP 我使用 Alamofire 通过定时器请求 JSON 数据每秒发送几次请求。数据按预期进入,但我不定期地随机崩溃,并收到与 OP 相同的消息,即 开始日期不能晚于结束日期! 等等
解法: 我没有定期发送 Alamofire 请求,而是添加了一些逻辑,在发送下一个请求之前检查前一个请求的 return。这完全消除了随机崩溃。
希望对您有所帮助:)
@thierryb