gpt4 book ai didi

ios - 通过 NSLog 打印 NSError 总是引发 EXE_BAD_ACCESS

转载 作者:可可西里 更新时间:2023-11-01 00:52:21 26 4
gpt4 key购买 nike

我有一个用于检索远程 json 文件的代码。我试图在网络不可用时打印错误(故意打开飞行模式以产生错误)。

但每次,它都会在日志行上引发 EXE_BAD_ACCESS

我的代码是这样的:

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){
(response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

if(error != nil){
let errorDesc = error!.description ?? ""

NSLog("HTTP request error = \(error!.code), desc = \(errorDesc)")

handler(houseList, error)
return
}
...Omitted for Brevity...
}

NSLog("HTTP request error =\(error!.code), desc =\(errorDesc)") 是引发错误的行

我的观察:

  • 首先,在我的调试窗口中,error.description 看起来非常好。我可以毫无问题地查看数据。

  • 其次,如果我将 NSLog 更改为 print(),那么一切正常很好!

  • 最后,如果我将原始行更改为以下内容,它也可以工作

    NSLog("HTTP 请求错误 = (error!.code), desc = %@", errorDesc)

是不是NSlog不能正确处理String Interpolation

如果是这样,那为什么在某些情况下比如"HTTP request error =\(error!.code),它可以工作?

我的开发环境:Xcode:版本 7.0.1 (7A1001)OS X:优胜美地 10.10.5(14F27

感谢您的宝贵时间! :)

最佳答案

NSLog() 的第一个参数是一个格式字符串,类似于C 库中的 printf() 函数。此格式字符串用于作为模板并包含 format specifiers比如%d, %s, %@, ... 格式指定了如何解释剩余的参数。

现在在你的情况下,在

NSLog("HTTP request error = \(error!.code), desc = \(errorDesc)")

错误代码和描述被插入到格式字符串中。如果错误描述恰好包含格式说明符(例如 %s),则 NSLog() 需要另一个参数(例如字符串)。如果没有参数或者它的类型错误,则行为是未定义,代码可能会崩溃。

因此,格式字符串应该始终是常量字符串文字:

NSLog("HTTP request error = %ld, desc = %@", error!.code, errorDesc)

如果你想利用 Swift 的字符串插值然后仅使用 %@ 作为格式并传递内插的 String作为附加参数:

NSLog("%@", "HTTP request error = \(error!.code), desc = \(errorDesc)")

关于ios - 通过 NSLog 打印 NSError 总是引发 EXE_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33144389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com