博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[coreData]Transformable 格式的attribute ,及自定义格式的attribute
阅读量:5226 次
发布时间:2019-06-14

本文共 2528 字,大约阅读时间需要 8 分钟。

转载说明(谢谢)

http://blog.csdn.net/a21064346/article/details/8082428

今天很累,找了一天的coredata对不同数据类型的 attribute的处理,但是还是没有找到一个合理的解决方案。

下面就来和大家分享一下今天的收获。

对于使用过coreData的朋友来说,一定碰到过 type 的类型中没有自己想要得到的那一种。

比如NSArray,NSDictionary,NSValue等等。

比如CGRect,CGImage,UIColor,UIFont等等

那么下面我将介绍,我对这些东西处理有4种方法可以落实。

第一种方法:以前写过一个blog,就是第一种,大家可以去看看,这里省略. 

http://blog.csdn.net/a21064346/article/details/7792074

第二种:将attribute的type设置成Transformable格式。使用时装载的数据格式得遵循<NSCoding>

[csharp] 
  1. NSAttributeType type = [self typeForEditedAttribute];  
  2.     switch( type ) {  
  3.     case NSDateAttributeType:  
  4.         valueFromView = self.datePicker.date;  
  5.         break;  
  6.     case NSStringAttributeType:  
  7.         if( [self.fieldKeyTester shouldUseTextViewForKey: self.editedFieldKey inEntity: self.editedObject.entity.name] ) {  
  8.             valueFromView = self.textView.text;  
  9.         } else {  
  10.             valueFromView = self.textField.text;  
  11.         }  
  12.         break;  
  13.     case NSInteger16AttributeType:  
  14.     case NSInteger32AttributeType:  
  15.     case NSInteger64AttributeType:  
  16.         valueFromView = [NSNumber numberWithInteger: [self.textField.text integerValue]];  
  17.         break;  
  18.     case NSDecimalAttributeType:  
  19.     case NSDoubleAttributeType:  
  20.     case NSFloatAttributeType:  
  21.         valueFromView = [NSNumber numberWithDouble: [self.textField.text doubleValue]];  
  22.         break;  
  23.     case NSBooleanAttributeType:  
  24.         valueFromView = [NSNumber numberWithBool: self.switchControl.isOn];  
  25.         break;  
  26.     case NSObjectIDAttributeType:  
  27.     case NSTransformableAttributeType://这里就可以来进行一个归档,然后通过coredata进行存储了。反向操作的时候,也是类似的。  
[csharp] 
  1.                                   //根据自己的code来写判定条件就好了。  
  2. case NSBinaryDataAttributeType:  
  3. case NSUndefinedAttributeType:  
  4.     NSLog( @"Don't know how to handle attribute type: %d in %s", type, __func__ );  
  5.     break;  
  6. default:  
  7.     NSLog( @"Unrecognized attribute type: %d in %s", type, __func__ );  
  8.     break;  
  9. }  
具体code太多。。。不好贴,就先找个代表性的。

其实,看完第一种方法的人,运用过,就可以发掘,这两种东西不是感觉一回事吗?答案是否定的。举个比喻来说:第一种方法是 东西还没吃到肚子里,就开始做归档操作转化为NSData的形式,用的时候再反向操作。第二种方法,虽然也是要去进行类似的处理,但是它是在配置搭建entities(表)的时候(还没倒入数据),就已经弄成这样了。他们一个作用于coredata外,一个是在内。

不过,它们的本质都是 归档,用NSData的格式将数据装起来,用的时候再反向操作。

再介绍第三种方法之前,我想先对前两种方法做一个总结

优点:几乎所有需要存储的数据 都可以通过前两种方法得到解决,方便,将数据得以保存。

缺点:不能通过 qury查询 或者 fetchResult 来进行过滤。(往往这是致命的缺点)

第三种方法,也是本人即将使用的方法(实在是前两种解决不了,因为我需要qury 或者说过滤,而且也没找到好的方法,如果有人能指点一二感激不尽)

将需要的数据(一般来说是需要你能过滤的string的数组),一段一段的写进一个string中,通过一个特殊的标志符号来进行隔断。

查询的时候  例如 :phoneNumbers中的一个,而一个人有多个phoneNumber,并且有不同的标签。e.g :   work 123456;home 0987654;iPhone  778899;

那么我这样自行 组成的string 好处就能发挥出来。

但是,如果是查询 url的话,可能会比较麻烦,因为几乎你找不到 起到划分作用的 字符来拆 string(幸好我没碰到哈哈),而你又需要去过滤去查询,而且又是一个数组或字典的数据对象。

第四种方法,对特殊的attribute 单独建立一个 entity

因为这快不算熟悉,单独的entity需要 relation,和其他entity进行连接

转载于:https://www.cnblogs.com/zsw-1993/archive/2012/10/18/4880772.html

你可能感兴趣的文章
使用C#交互快速生成代码!
查看>>
洛谷P4315 月下“毛景树” 边权树剖+双标记
查看>>
P2234 [HNOI2002]营业额统计
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
P2146 [NOI2015]软件包管理器
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
2019.7.26 T1 树剖+双标记
查看>>
P1505 [国家集训队]旅游
查看>>
P3950 部落冲突 树链剖分
查看>>
洛谷P1471 方差 线段树维护区间方差
查看>>
P2286 [HNOI2004]宠物收养场
查看>>
P1342 请柬 建反图+dijkstra
查看>>
P2047 [NOI2007]社交网络
查看>>
数据结构测试1 on 2019.9.24
查看>>
数据结构测试2 on 2019.9.25
查看>>
有道词典_每日一句_2019/07
查看>>
微信小程序 base64格式图片的显示及保存
查看>>
有道词典_每日一句_2019/08
查看>>
微信小程序 报错Failed to load image
查看>>