为什么 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 插入字符串
我使用 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 方式 \()
.