我正在使用带位置的相机。
我正在做的是单击“捕获图像”按钮时,我将所有位置信息收集在字典中,然后进一步在CFDictionarySetValue中进行设置。这是我面临的问题。CFDictionarySetValue
的格式为dict, key, value
,如下所示:
CFDictionarySetValue((dictionary)CFMutableDictionary!, (key)UnsafeRawPointer!,(value) UnsafeRawPointer!)
我的字典,键和值如下:
字典:
let mutable : CFMutableDictionary = CFDictionaryCreateMutableCopy(nil, 0, metaDict)
键:
kCGImagePropertyGPSDictionary
值
let gpsDict : NSDictionary = [kCGImagePropertyGPSLatitude: Int(fabs(loc.coordinate.latitude)), kCGImagePropertyGPSLatitudeRef : ((loc.coordinate.latitude >= 0) ? "N" : "S"), kCGImagePropertyGPSLongitude : Int(fabs(loc.coordinate.longitude)),kCGImagePropertyGPSLongitudeRef : ((loc.coordinate.longitude >= 0) ? "E" : "W") , kCGImagePropertyGPSTimeStamp : formatter.string(from: loc.timestamp), kCGImagePropertyGPSAltitude : Int(fabs(loc.altitude))]
看起来像
CFDictionarySetValue(mutable, kCGImagePropertyGPSDictionary, gpsDictionary)
我在上面一行说
"Cannot convert value of type NSDictionary to UnSafeRawPointer! for gpsDictionary"
时出错尝试了一些方法,但仍然没有成功。
最佳答案
您正在将NSDictionary
作为CFDictionarySetValue(...)
的参数传递,但是期望的类型是UnSafeRawPointer
类型的指针。第二个参数kCGImagePropertyGPSDictionary
也是如此。您正在传递NSString
而不是指针。
要解决此问题,请为两个参数创建指针。一种可能的方法:
let pGPSDictionary = Unmanaged.passUnretained(kCGImagePropertyGPSDictionary).toOpaque()
let pGpsDict = Unmanaged.passUnretained(gpsDict).toOpaque()
CFDictionarySetValue(mutable, pGPSDictionary, pGpsDict)
有一种更好的语法可以创建
UnSafeRawPointer
,我现在不记得了。关于ios - 如何在Swift 3.0中使用UnSafeRawPointer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40972038/