为啥 SKProductsRequestDelegate/SKRequestDelegate didFailWithError 在 NSError 上抛出 EXC_BAD_ACCESS?
Posted
技术标签:
【中文标题】为啥 SKProductsRequestDelegate/SKRequestDelegate didFailWithError 在 NSError 上抛出 EXC_BAD_ACCESS?【英文标题】:Why SKProductsRequestDelegate/SKRequestDelegate didFailWithError throws EXC_BAD_ACCESS on NSError?为什么 SKProductsRequestDelegate/SKRequestDelegate didFailWithError 在 NSError 上抛出 EXC_BAD_ACCESS? 【发布时间】:2016-06-01 12:04:15 【问题描述】:我使用SKProductsRequest
从 App Store 下载产品信息。
当我在我的设备上测试连接丢失时,请求失败,但是当我尝试 NSLog
错误时,我的应用程序在 SKRequestDelegate
内崩溃:
我做错了什么?另一个让我好奇的是,Expression Inspector 能够显示NSError.debugDescription
...
它在第一次请求时失败,因此对于 productRequest 变量的多次使用没有可能的错误(这是我的 swift 类中的强引用)。
【问题讨论】:
【参考方案1】:我终于找到了原因。与SKProductsRequest
无关!
我认为NSLog
和字符串插值存在一个讨厌的错误,因为当我替换时:
NSLog("Failed: \(error.debugDescription)")
通过
print("Failed: \(error.debugDescription)")
一切都好!
显然,错误消息的内容会在 NSLog 中引发 EXC_BAD_ADDRESS(即使实际上没有字符串插值:NSLog(error.debugDescription)
也会失败)。
相关回复:https://***.com/a/29631505/249742
NSLog("%@", error.debugDescription)
似乎在任何情况下都可以正常工作。
也许NSLog(variable)
是对NSLog 的误用,但我认为NSLog(\(variable))
应该被解释为NSLog("%@", variable)
。否则,没有可靠的方法可以使用 NSLog 快速方式 \()
插入字符串。
【讨论】:
以上是关于为啥 SKProductsRequestDelegate/SKRequestDelegate didFailWithError 在 NSError 上抛出 EXC_BAD_ACCESS?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?