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

Why SKProductsRequestDelegate/SKRequestDelegate didFailWithError throws EXC_BAD_ACCESS on NSError?

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

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

它在第一次请求时失败,因此不存在与多次使用 productRequest 变量相关的可能错误(这是我的 swift class 中的强引用)。

终于找到原因了。与SKProductsRequest!

无关

我认为 NSLog 和字符串插值存在严重错误,因为当我替换:

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

来自

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

一切都很好!

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


相关答案:

NSLog("%@", error.debugDescription)

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

也许NSLog(variable)是对NSLog的误用,但我认为NSLog(\(variable))应该解释成NSLog("%@", variable)。否则,没有可靠的方法使用 swift 方式 \().

用 NSLog 插入字符串