CoreData中Transformable类型浅谈

在很久很久以前,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的描述中实际是两个关系:一对一 和 一对多!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值