版权声明:大熊猫猪·侯佩原创或翻译作品.谢绝转载! hopy https://blog.csdn.net/mydo/article/details/82555617
在很久很久以前,CoreData对于用户自定义类型数据的保存比较棘手,主要有2种办法:
- 使用NSData
- 使用Transformable类型
对于后者还需要写一个转换包装类,操作繁琐,显得意义不大.
不过现在Transformable类型只需要你保存对象的类遵守NSCoding协议,就可大功告成.
不仅如此,之后与此对象相关的标准类型都可以运用自如,比如:
class MyClass:NSCoding{
}
var coreDataValue:NSObject? //OK!
var coreDataValueArray:NSObject? //OK Too!
if let value = coreDataValue as? MyClass{
//do something...
}
if let values = coreDataValueArray as? [MyClass]{
//do what you want...
}
如上所示,实际上在CoreData的Description中,coreDataValue和coreDataValueArray的类型都是Transformable!
是滴,并不需要再傻傻的将MyClass包装成NSData,然后自己打包再解包了;也不用写繁琐的Transformable转换类了.
但是有一点要注意,你无法让一个NSManagedObject对象遵守NSCoding协议.
NSCoding主要就是支持持久存储,因为NSManagedObject等于已经完成了一种形式的持久存储支持(保存在CoreData中),所以从道理上也没必要再支持另一种.
如果你要实现原来Transformable同等的类型,很简单,用关系:
@NSManaged public var objects: NSSet?
@NSManaged public var object: MyClass?
以上两个类型在CoreData的描述中实际是两个关系:一对一 和 一对多!