大佬教程收集整理的这篇文章主要介绍了如何在iOS 12中替换NSKeyedArchiver的初始化程序init(forWritingWith :)来编码CKRecord的元数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
let data = NSMutableData() let coder = NSKeyedArchiver.init(forWriTingWith: data) coder.requiresSecureCoding = true record.encodeSystemFields(with: coder) coder.finishEncoding()
CKRecord类的encodeSystemFields方法需要NSKeyedArchiver对象(NSCoder子类),编码数据存储在与此对象关联的NSMutableData对象中.如果我用init(requiresSecureCoding :)初始化程序替换init(forWriTingWith :)初始化程序,我得到一个NSKeyedArchiver对象,但是这个对象没有与任何NSMutableData对象关联,因此我没有得到记录的元数据.我不确定如何完成代码以将NSKeyedArchiver对象生成的数据转换为NSMutableData对象.
@H_502_4@encodedData
method,它在归档器上调用-finishEncoding并返回归档器创建的最终编码数据.这是通过 – [NSKeyedArchiver init]初始化时获取完成数据的方式:
let coder = NSKeyedArchiver() /* encode stuff */ let data = coder.encodedData
这消除了对NSMutableData变体的需求,并且通过此更新,不推荐使用可变数据变体,这有利于更新的范例.所以而不是写作
let data = NSMutableData() let coder = NSKeyedArchiver.init(forWriTingWith: data) coder.requiresSecureCoding = true record.encodeSystemFields(with: coder) coder.finishEncoding()
你会写的
let coder = NSKeyedArchiver(requiringSecureCoding: truE) record.encodeSystemFields(with: coder) let data = coder.encodedData
不再需要手动分配.requiresSecureCoding和手动finishEncoding()调用.
请注意,只有在调用CKRecord.encodeSystemFields(带:)时才需要这种舞蹈,它显式地接受NSCoder以便仅编码自身的子集.在编码对象的一般情况下,您将使用the new NSKeyedArchiver.archivedData(withRootObject:requiringSecureCoding:)
method:
let data = try NSKeyedArchiver.archivedData(withRootObject: /* object */,requiringSecureCoding: truE)
这相当于
let coder = NSKeyedArchiver(requiringSecureCoding: truE) coder.encodeObject(/* object */,forKey: NSKeyedArchiveRootObjectKey) let data = coder.encodedData@H_502_4@ @H_502_4@
以上是大佬教程为你收集整理的如何在iOS 12中替换NSKeyedArchiver的初始化程序init(forWritingWith :)来编码CKRecord的元数据全部内容,希望文章能够帮你解决如何在iOS 12中替换NSKeyedArchiver的初始化程序init(forWritingWith :)来编码CKRecord的元数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。