此代码类型检查并编译,但随后崩溃。如何将CGImage
保存为Data
,以便以后可以再次读取它。
let cgi: CGImage? = ...
var mData = Data()
let imageDest = CGImageDestinationCreateWithData(mData as! CFMutableData,
kUTTypePNG, 1, nil)!
CGImageDestinationAddImage(imageDest, cgi!, nil)
CGImageDestinationFinalize(imageDest)
最后一行崩溃,控制台错误为:
2018-01-17 19:25:43.656664-0500 HelloPencil[2799:3101092] -[_NSZeroData
appendBytes:length:]: unrecognized selector sent to instance 0x1c80029c0
2018-01-17 19:25:43.658420-0500 HelloPencil[2799:3101092] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason:
'-[_NSZeroData appendBytes:length:]: unrecognized selector
sent to instance 0x1c80029c0'
从Data
到CFMutableData
的转换是Xcode推荐的,但可能是错误的。
1条答案
按热度按时间ohfgkhjo1#
问题在于创建可变数据的方式。
Data
不能直接转换为NSMutableData
。从
Data
强制转换为CFMutableData
的唯一方法是先将其强制转换为NSData
,获取其mutableCopyNSMutableData
,然后将其强制转换为CFMutableData
。NSMutableData
免费桥接到CFMutableData
但是在这种情况下,考虑到没有数据需要转换,这样做没有任何意义,只需使用
CFDataCreateMutable(nil, 0)
初始化一个新的CFMutableData
对象:编辑/更新:超码11 ·斯威夫特5.1