我是Swift / XCode的新手(而且我没有Obj-C经验)所以我正在通过"玩具"练习,但我无法找出调试问题。也就是说,我为所有异常启用了断点,现在我得到了一个" light"例外(它没有终止执行),我无法弄清楚如何诊断。
由于没有显示异常类型(并且我无法使用this Objective C技术来获取信息)我不确定如何识别发生了什么异常。
有问题的代码:
var error: Unmanaged<CFErrorRef>? = nil
let parameters: [String:AnyObject] = [kSecAttrKeyType: kSecAttrKeyTypeAES]
let rawcryptokey: [UInt8] = [63, 17, 27, 99, 185, 231, 1, 191,
217, 74, 141, 16, 12, 99, 253, 41] // (sample)
let cfdatacryptokey: CFDataRef = CFDataCreate(kCFAllocatorDefault, rawcryptokey, rawcryptokey.count)
let cryptokey: SecKeyRef = SecKeyCreateFromData(parameters as CFDictionaryRef,
cfdatacryptokey, &error).takeRetainedValue()
我得到Thread1:断点1.2但是我可以继续执行,直到&#34;下游&#34;崩溃,但我没有办法确定抛出什么异常,更不用说为什么了。虽然解决代码问题是我的直接关注,但有人可以提出一种方法或指南来处理Swift / CF代码中的异常吗?
非常感谢!
答案 0 :(得分:1)
在C ++和Objective-C之间如何使用和处理异常方面存在根本区别。
在Objective-C中,它们是致命事件,表明待完全失败。
在C ++中,它们通常用于代替返回可能未检查的错误值(java和C#使用它们类似)因此,失败的网络调用可能会抛出异常而不是返回错误值。
启用所有异常将在&#34; normal&#34;上生成断点。 C ++异常,这些异常是预期的并且以令人惊讶的规律性发生。
我的建议是使用&#34;所有Objective-C Exceptions&#34;,&#34; objc_exception_throw&#34;和&#34; - [NSException raise]&#34;