繁体   English   中英

如何将由可转换的 CoreData 属性创建的 CKRecord NSData 字段解码回其原始类型?

[英]How to decode a CKRecord NSData field, created by a transformable CoreData attribute, back to its original type?

设置:

我的应用程序使用 CoreData 和 CloudKit 同步。
实体Item具有Int16类型的属性status以及相应的属性@NSManaged var status: Int16 ,以及使用NSSecureUnarchiveFromDataTransformertransformable类型的属性names和相应的属性@NSManaged var names: Set<String>?

为了在 iCloud 记录更改时收到通知,该应用程序使用查询订阅。
下发通知时,发送改变后的object的标识符,获取NSManagedObjectobjectID ,使用persistentContainer: NSPersistentCloudKitContainer的persistentContainer.record(for: objectID)获取对应的ckRecord: CKRecord persistentContainer: NSPersistentCloudKitContainer获取实际的属性值.

问题:

“正常”字段值,例如status ,可以使用ckRecord["CD_status"] as! Int16 ckRecord["CD_status"] as! Int16 我也可以得到ckRecord["CD_names"] as! NSData ckRecord["CD_names"] as! NSData ,但我不知道如何将其转换回Set<String>? .

属性的类型仅限于 CoreData 中的某些类型, Set<String>不是一个,这就是为什么您需要一个转换器,它将其转换为(NS)Data

因此,您可以使用该转换器将其转换回transformedValue(_:)

NSSecureUnarchiveFromDataTransformer().transformedValue(ckRecord["CD_names"])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM