Ios os_log:Console.app和`日志流中的整数的意外值`
代码(Swift 3): Xcode 8(调试区域控制台):Ios os_log:Console.app和`日志流中的整数的意外值`,ios,swift,macos,logging,foundation,Ios,Swift,Macos,Logging,Foundation,代码(Swift 3): Xcode 8(调试区域控制台): 2016-10-01 00:38:55.903298 AUHost[82455:1512026]状态已更改:从1更改为2 终端(日志流): 2016-10-01 00:38:54.880763+0200 0x17125a默认0x80000000022D5E 82455 AUHost:状态已更改:从1更改为1718550530 控制台应用程序: 状态已更改:从1更改为1718550530 为什么控制台。应用程序和命令日志流显示意外值17
2016-10-01 00:38:55.903298 AUHost[82455:1512026]状态已更改:从1更改为2
终端(日志流):
2016-10-01 00:38:54.880763+0200 0x17125a默认0x80000000022D5E 82455 AUHost:状态已更改:从1更改为1718550530
控制台应用程序:
状态已更改:从1更改为1718550530
为什么控制台。应用程序和命令日志流显示意外值1718550530,而不是2
谢谢大家!
更新: 使用偶数个参数时观察到的意外行为: 输出: 看起来像只虫子。向苹果报告:截至今天(2020-07-21),在Swift 5.something和Xcode 11.6中,我在iOS应用程序中使用os_日志时仍然遇到这个问题 这不是一个完整的修复方法,但对我来说有效的解决方法是在调用
os_log()
之前将传入的Int
转换为字符串(不要忘记将格式标记更改为%@
):
1718550530的低位16位为0000 0000 0010(=2),1718550532的低位16位为0000 0000 0100(=4)。True。这是否意味着我们需要在提交到日志流之前“转换/翻转/移位”原始值?您是否有意将所有数字设置为Int32?编辑:这并不能解决问题。这看起来确实像一个bug。还尝试使用不同的格式化程序并转换为C类型(即CInt、CLong)。没有帮助。(不过,它在Objective-C中运行良好。使用Swift的os_log()显然像一个bug。我将提交一个单独的bug,参考您的。
os_log("State changed: from %d to %d", 1, 2)
os_log("View loaded: %d", 1)
os_log("View loaded: %d => %d", 1, 2)
os_log("View loaded: %d => %d => %d", 1, 2, 3)
os_log("View loaded: %d => %d => %d => %d", 1, 2, 3, 4)
os_log("View loaded: %d => %d => %d => %d => %d", 1, 2, 3, 4, 5)
View loaded: 1
View loaded: 1 => 1718550530
View loaded: 1 => 2 => 3
View loaded: 1 => 2 => 3 => 1718550532
View loaded: 1 => 2 => 3 => 4 => 5
let intA = 7
let intB = 4
os_log("State changed: from %@ to %@", String(intA), String(intB))