Core Data浅谈系列之十 : 关于数据模型中实体的属性

  1. 云栖社区>
  2. 博客列表>
  3. 正文

Core Data浅谈系列之十 : 关于数据模型中实体的属性

思禽 2014-06-08 20:23:00 浏览564 评论0

摘要: 之前写了《Core Data浅谈系列汇总》,今天稍微回顾了下,做些补充。 在这个系列的第一篇《基础结构》中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型、布尔值统一用NSNumber来表示; 字符串类型用NSString表示; 时间类型用NSDate表示; 二进制数据类型用NSData表示; 非标准类型用Transformable来表示; 而Attribute还有其自身的Properties,比如Transient表示不用持久化到磁盘,Optional表示非必填字段(如果必填字段为空保存时会出错),Indexed则表示索引字段。

之前写了《Core Data浅谈系列汇总》,今天稍微回顾了下,做些补充。

在这个系列的第一篇《基础结构》中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute:

  • 数据类型、布尔值统一用NSNumber来表示;
  • 字符串类型用NSString表示;
  • 时间类型用NSDate表示;
  • 二进制数据类型用NSData表示;
  • 非标准类型用Transformable来表示;

而Attribute还有其自身的Properties,比如Transient表示不用持久化到磁盘,Optional表示非必填字段(如果必填字段为空保存时会出错),Indexed则表示索引字段。

这里主要讨论下Binary Data和Transformable两种。

以存储UIImage为例,如果使用Binary Data类型来存储,那么字段设为对应类型:


@property (nonatomic, retain) NSData * image;

在赋值之前需要将UIImage先转为NSData类型。这一步对于UIImage类型来说可能比较方便,可以直接调用类似
UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image);
的函数进行转换,不过如果对于其它类型,尤其是自定义的类型来说,每次都要如此操作则显得很麻烦,使用Transformable类型可以通过NSValueTransformer及其扩展来优化这个步骤:

#import <Foundation/Foundation.h>

@interface UIImageTransformer : NSValueTransformer

@end

如果是自定义Person结构,可能就叫做DIYPersonTransformer。


有了这么个Transformer,可以在面板里面进行指定,但在其可以顺利工作之前需要提供几个方法:

+ (BOOL)allowsReverseTransformation {
    return YES;
}

表示可以双向转换,写进去和读出来都是通的。

+ (Class)transformedValueClass { 
    return [NSData class];
}

表示实际存储的类型。

- (id)reverseTransformedValue:(id)value
{
    //
}

- (id)transformedValue:(id)value
{
    // 
}

表示实际的转换方法。

但是说到使用Core Data存储UIImage这个话题,这里有更进一步的讨论:

http://stackoverflow.com/questions/4158286/storing-images-in-core-data-or-as-file

http://stackoverflow.com/questions/16685812/how-to-store-an-image-in-core-data

而关于上面讨论的内容,也有一些相关链接:

http://stackoverflow.com/questions/14256762/what-is-the-difference-between-transformable-and-binary-data

http://stackoverflow.com/questions/6783091/when-not-to-use-core-data-type-transformable

http://stackoverflow.com/questions/1562676/best-practice-array-dictionary-as-a-core-data-entity-attribute

http://stackoverflow.com/questions/3014498/what-can-i-do-with-an-transformable-attribute-type-in-core-data-on-the-iphone


Brief Talk About Core Data Series, Part 10 : About NSEntityDescription's Attributes

Jason Lee @ Hangzhou
Blog : http://blog.csdn.net/jasonblog
Weibo : http://weibo.com/jasonmblog


用云栖社区APP,舒服~

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击

网友评论

思禽
文章84篇 | 关注44
关注
快速、完全托管的TB/PB级数据仓库解决方案,向用户提供了完善的数据导入方案以及多种经典的分... 查看详情
用配置管理(Application Configuration Management,简称 ... 查看详情
阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云9.10会员日

阿里云9.10会员日