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

原创 2014年06月08日 20:23:37

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS之分析网易新闻存储数据(CoreData的使用,增删改查)

CoreData很强大,用起来很方便,是一个不错的存储数据的好方法。 1、网易新闻用CoreData存储了新闻列表,因为我打开网易新闻的Documents时看到了三个文件:newsapp.sqlite...

Core Data浅谈系列之四 : 数据模型的版本变迁

继上一篇文章末尾提到的,一支队伍可以添加多名球员,不过一名球员只能属于一支队伍中,这分别对应着Core Data中一对多和一对一的属性关系: ...

Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate

yu 上一篇文章用实际代码演示了Core Data应用中基本的增删改查操作,使用的是NSManagedObject对象,利用KVC来修改、获取对象的属性值。 除此之外,我们还可以创建与Pl...

Core Data浅谈系列之一 : 基础结构

Core Data是苹果官方提供的一套框架,用来解决与对象生命周期管理、对象关系图管理和持久化等方面相关的问题。大多数情况下,我们引入Core Data作为持久化数据的解决方案,并利用它将持久化数...

Core Data浅谈系列之九 : 使用Mapping Model

原帖地址: 通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入Mapping ...

Core Data浅谈系列之二 : 简单的CURD

在上一篇中简单介绍了Core Data Stack,自上而下地对Core Data应用结构有个基本的认识,不过都是理论上的。这里就以上一篇的理论构建起一个可运行的Demo,执行一些简单的增删改查操作。...

Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate(附Demo)

上一篇文章用实际代码演示了Core Data应用中基本的增删改查操作,使用的是NSManagedObject对象,利用KVC来修改、获取对象的属性值。 除此之外,我们还可以创建与Player、Team...

Core Data浅谈系列之七 : 使用NSFetchedResultsController

原帖地址: 上一篇讨论到添加球员信息后,球员列表没有及时得到修改。这是由于之前我们简单地使用了一个NSMutableArray来管理球员列表,需要我们额外做一些变更通知。而在Core...

Core Data浅谈系列之六 : 验证用户输入

在做Web开发时,需要谨记的一条原则是“绝不要相信用户的任何输入”(参见《Essential PHP Security》)。 与网页上的表单提交类似,做客户端开发时也应该考虑用户输入,比如可以为...

Core Data浅谈系列之五 : 在UITableView中展示

在逻辑上(表关系)将Team和Player关联起来后,我们将其展现到UI视图上。 首先,为App添加导航栏: [cpp] view plaincopy ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)