CoreData中Transformable类型浅谈

版权声明:大熊猫猪·侯佩原创或翻译作品.谢绝转载! 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的描述中实际是两个关系:一对一 和 一对多!

猜你喜欢

转载自blog.csdn.net/mydo/article/details/82555617