为什么SKProductsRequestDelegate / SKRequestDelegate didFailWithError在NSError上抛出EXC_BAD_ACCESS?

时间:2016-06-01 12:04:15

标签: ios swift nserror

我使用SKProductsRequest从App Store下载产品信息。 当我在设备上测试连接丢失时,请求失败,但当我尝试SKRequestDelegate错误时,我的应用在NSLog内崩溃:

crash

我做错了什么?另一个奇怪的事情是Expression Inspector能够显示NSError.debugDescription ...

第一次请求失败,因此没有可能的bug相对于productRequest变量的多次使用(这是我的swift类中的强引用)。

1 个答案:

答案 0 :(得分:2)

我终于找到了原因。它与SKProductsRequest无关。

我认为NSLog和字符串插值存在一个令人讨厌的错误,因为当我替换:

NSLog("Failed: \(error.debugDescription)")

通过

print("Failed: \(error.debugDescription)")

一切都很好!

显然,错误消息的内容可能在NSLog中引发EXC_BAD_ADDRESS(事实上即使没有字符串插值:NSLog(error.debugDescription)也会失败)。

相关的anwser:https://stackoverflow.com/a/29631505/249742

NSLog("%@", error.debugDescription)

似乎在每种情况下都能正常工作。

也许NSLog(variable)是对NSLog的滥用,但我认为NSLog(\(variable))应该被解释为NSLog("%@", variable)。否则,没有可靠的方法使用快速方式\()使用NSLog插入字符串。