【发布时间】:2015-10-01 08:50:55
【问题描述】:
我的代码中有一行已被弃用,XCode 中有建议用什么替换它,但我无法理解其中的区别,这是我的三行有效:
let path = NSBundle.mainBundle().pathForResource("example", ofType: ".p12")
let pkcs12Data = NSData.dataWithContentsOfMappedFile(path!)
let cf: CFDataRef = pkcs12Data as! CFDataRef
现在根据警告和建议,我将代码更改为:
let path = NSBundle.mainBundle().pathForResource("example", ofType: ".p12")
let pkcs12Data = NSData(contentsOfFile: path!)
let cf: CFDataRef = pkcs12Data as! CFDataRef
这给了我一个错误:
EXC_BAD_INSTRUCTION (CODE=EXC_I386_INVOP SUBCODE=0x0)
【问题讨论】:
-
不要投射,使用
CFDataCreate()。 -
我正在尝试,我必须说我正在学习 swift 并使用它第 8 天,我正在努力将方法所需的所有参数放在一起。 CFDataCreate(_ allocator: CFAllocator!, _ bytes: UnsafePointer
, _ length: CFIndex) 相当混乱... -
CFDataCreate(NULL, pkcs12Data.bytes, pkcs12Data.length)? -
嗯,我明白你为什么自然会期望它起作用。但是它会引发另一个错误:
/Users/user/code/xyz/CryptoOperations/CryptographyOperations/IdentityFileReader.swift:30:42: Cannot convert value of type '()' to expected argument type 'CFAllocator!' -
然后第二个参数还有一个:
/Users/user/code/xyz/CryptoOperations/CryptographyOperations/IdentityFileReader.swift:30:66: Cannot convert value of type 'UnsafePointer<Void>' (aka 'UnsafePointer<()>') to expected argument type 'UnsafePointer<UInt8>'
标签: ios casting swift2 nsdata cfdata