设为首页 加入收藏

TOP

Core Data浅谈系列之十 : 关于数据模型中实体的属性
2015-07-24 06:37:29 来源: 作者: 【 】 浏览:37
Tags:Core Data 系列 关于 数据 模型 实体 属性

之前写了《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 
  
   

@interface UIImageTransformer : NSValueTransformer

@end
  

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

\

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

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cHJlIGNsYXNzPQ=="brush:java;">+ (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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces(441B) Round #252 (.. 下一篇C++ - 同步读写文本 代码(C++)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: