一直可靠工作的时间戳功能只是导致 EXC_BAD_INST

Timestamp function that has been working reliably just caused EXC_BAD_INSTRUCTION(一直可靠工作的时间戳功能只是导致 EXC_BAD_INSTRUCTION)
本文介绍了一直可靠工作的时间戳功能只是导致 EXC_BAD_INSTRUCTION的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在使用这个函数来生成时间戳.我在 Stack Overflow 上的某个地方找到了它.

I have been using this function to generate a time stamp. I found it somewhere here on Stack Overflow.

@objc public class var timestamp: String {
    return "(Int(NSDate().timeIntervalSince1970 * 1000))"
}

它一直在正常工作,但我刚刚收到一个 EXC_BAD_INSTRUCTION:

It has been working without issue, but I just got a EXC_BAD_INSTRUCTION:

fatal error: floating point value cannot be converted to Int because it is greater than Int.max

随着这个应用程序的开发接近完成,突然间看到它导致 EXC_BAD_INSTRUCTION 让我感到紧张.这是在模拟器中运行的,但我设置了有效的日期和时间.

As the development of this app is nearing completion it makes me nervous to all of the sudden see it cause a EXC_BAD_INSTRUCTION. This is running in the Simulator, but I have a valid date and time set.

任何想法或建议或非常感谢.下面是回溯.

Any ideas or suggestions or are greatly appreciated. Below is the backtrace.

(lldb) bt
* thread #1: tid = 0x15c4d, 0x04a30393 libswiftCore.dylib`function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> () + 67, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
frame #0: 0x04a30393 libswiftCore.dylib function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> () + 67
* frame #1: 0x00afe0c9 TDTPhotoLib static     
TDTDeviceUtilites.timestamp.getter(self=TDTPhotoLib.TDTDeviceUtilites) + 409 at TDTDeviceUtilites.swift:127
frame #2: 0x00166979 Oilist TDTPaintingViewController.finshedSession(sender=0x7aee0fb0, self=0x7e9d3800) -> () + 169 at TDTPaintingViewController.swift:1370
frame #3: 0x00102896 Oilist TDTOilistMenuPainting.goForward(sender=0x7aee0fb0, self=0x7c218770) -> () + 374 at TDTOilistMenuPainting.swift:149
frame #4: 0x0010290d Oilist @objc TDTOilistMenuPainting.goForward(UIButton!) -> () + 61 at TDTOilistMenuPainting.swift:0
frame #5: 0x018a80b5 libobjc.A.dylib -[NSObject performSelector:withObject:withObject:] + 84
frame #6: 0x0336ee38 UIKit -[UIApplication sendAction:to:from:forEvent:] + 118
frame #7: 0x0336edb7 UIKit -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
frame #8: 0x03512f3b UIKit -[UIControl sendAction:to:forEvent:] + 79
frame #9: 0x035132d4 UIKit -[UIControl _sendActionsForEvents:withEvent:] + 433
frame #10: 0x035122c1 UIKit -[UIControl touchesEnded:withEvent:] + 714
frame #11: 0x033ef52e UIKit -[UIWindow _sendTouchesForEvent:] + 1095
frame #12: 0x033f05cc UIKit -[UIWindow sendEvent:] + 1159
frame #13: 0x03391be8 UIKit -[UIApplication sendEvent:] + 266
frame #14: 0x03366769 UIKit _UIApplicationHandleEventQueue + 7795
frame #15: 0x02423e5f CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
frame #16: 0x02419aeb CoreFoundation __CFRunLoopDoSources0 + 523
frame #17: 0x02418f08 CoreFoundation __CFRunLoopRun + 1032
frame #18: 0x02418846 CoreFoundation CFRunLoopRunSpecific + 470
frame #19: 0x0241865b CoreFoundation CFRunLoopRunInMode + 123
frame #20: 0x07031664 GraphicsServices GSEventRunModal + 192
frame #21: 0x070314a1 GraphicsServices GSEventRun + 104
frame #22: 0x0336ceb9 UIKit UIApplicationMain + 160
frame #23: 0x00131ed1 Oilist main + 145 at AppDelegate.swift:14
frame #24: 0x05631a25 libdyld.dylib start + 1

推荐答案

你的代码会在所有 32 位平台(如 iPhone 4、5)上崩溃因为

Your code will crash on all 32-bit platforms (such as iPhone 4, 5) because the result of

NSDate().timeIntervalSince1970 * 1000
// E.g.: 1464850525047.38

不适合 32 位整数.作为解决方案,使用 64 位整数:

does not fit into a 32-bit integer. As a solution, use 64-bit integers:

Int64(NSDate().timeIntervalSince1970 * 1000)

或者,如果打算创建一个 string 表示毫秒,使用字符串格式而不是整数转换:

Alternatively, if the intention is to create a string representing the milliseconds, use string formatting instead of an integer conversion:

String(format:"%.0f", NSDate().timeIntervalSince1970 * 1000)

这篇关于一直可靠工作的时间戳功能只是导致 EXC_BAD_INSTRUCTION的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)