CoreData存储NSDictionary、NSArray
来源:互联网 发布:微云mac同步云盘下载 编辑:程序博客网 时间:2024/05/11 05:30
CoreData是苹果推出的一个数据存储框架。CoreData提供了一种对象关系映射(ORM)的存储关系,CoreData可以将OC对象存储到数据库中,也可以将数据库中的数据转化为OC对象,这个过程不需要手动编写任何SQL语句,这是系统完成的,不像SQLite和FMDB。
CoreData里的类看着确实很头疼,常常记不住,不过还是贴出来加深下印象,有以下这四个:
NSManagedObjectContext ->托管对象上下文,进行数据操作时基本上和这个类有关。
NSManagedObjectModel ->托管对象模型,一个托管对象模型关联一个模型文件(.xcdatamodeld),存储数据库的数据结构。
NSPersistentStoreCoordinator ->持久化存储协调器,负责协调存储区和上下文之间的关系。
NSManagedObject ->托管对象,所有CoreData中的托管对象都必须继承自当前类,根据实体创建托管对象类文件。
我们知道在.xcdatamodeld里面可以add实体,就是表,然后往表里面添加属性,简单的字符串类型、基本数据类型Entity里都可以直接存储,但是复杂点的数组类型、字典类型等就不能直接存储,我们需要做些事情同样可以存储。
首先对Entity(MyFavTaskEntity)添加属性如locationDict,需要设置Attribute Type为Transformable,如下图所示1、2,设置Value Transformer为LocationDict,当然这个名字可以随便起,它是一个类名,继承NSValueTransformer,如下图3。
然后导出该实体,实体都是继承NSManagedObject,这正好得到证明,导出得到4个文件:
MyFavTaskEntity+CoreDataClass.h
//// MyFavTaskEntity+CoreDataClass.h// InteractiveMarketingGameEx//// Created by shenkun on 2016/11/15.// Copyright © 2016年 shenkun. All rights reserved.// This file was automatically generated and should not be edited.//#import <Foundation/Foundation.h>#import <CoreData/CoreData.h>@class NSObject;NS_ASSUME_NONNULL_BEGIN@interface MyFavTaskEntity : NSManagedObject@endNS_ASSUME_NONNULL_END#import "MyFavTaskEntity+CoreDataProperties.h"MyFavTaskEntity+CoreDataClass.m
//// MyFavTaskEntity+CoreDataClass.m// InteractiveMarketingGameEx//// Created by shenkun on 2016/11/15.// Copyright © 2016年 shenkun. All rights reserved.// This file was automatically generated and should not be edited.//#import "MyFavTaskEntity+CoreDataClass.h"@implementation MyFavTaskEntity@endMyFavTaskEntity+CoreDataProperties.h
//// MyFavTaskEntity+CoreDataProperties.h// InteractiveMarketingGameEx//// Created by shenkun on 2016/11/18.// Copyright © 2016年 shenkun. All rights reserved.//#import "MyFavTaskEntity+CoreDataClass.h"NS_ASSUME_NONNULL_BEGIN@interface MyFavTaskEntity (CoreDataProperties)+ (NSFetchRequest<MyFavTaskEntity *> *)fetchRequest;@property (nullable, nonatomic, copy) NSString *addressStr;@property (nullable, nonatomic, retain) NSObject *cardListArray;@property (nullable, nonatomic, copy) NSString *cityStr;@property (nullable, nonatomic, copy) NSString *distanceStr;@property (nullable, nonatomic, retain) NSObject *goldenEggArray;@property (nullable, nonatomic, copy) NSString *idStr;@property (nullable, nonatomic, copy) NSString *imgUrlStr;@property (nullable, nonatomic, retain) NSObject *locationDict;@property (nullable, nonatomic, copy) NSString *nameStr;@property (nullable, nonatomic, copy) NSString *playerCountStr;@property (nullable, nonatomic, copy) NSString *pointStr;@property (nullable, nonatomic, copy) NSString *typeStr;@property (nullable, nonatomic, copy) NSString *usernameStr;@property (nullable, nonatomic, copy) NSString *stateStr;@endNS_ASSUME_NONNULL_ENDMyFavTaskEntity+CoreDataProperties.m
//// MyFavTaskEntity+CoreDataProperties.m// InteractiveMarketingGameEx//// Created by shenkun on 2016/11/18.// Copyright © 2016年 shenkun. All rights reserved.//#import "MyFavTaskEntity+CoreDataProperties.h"@implementation MyFavTaskEntity (CoreDataProperties)+ (NSFetchRequest<MyFavTaskEntity *> *)fetchRequest {return [[NSFetchRequest alloc] initWithEntityName:@"MyFavTaskEntity"];}@dynamic addressStr;@dynamic cardListArray;@dynamic cityStr;@dynamic distanceStr;@dynamic goldenEggArray;@dynamic idStr;@dynamic imgUrlStr;@dynamic locationDict;@dynamic nameStr;@dynamic playerCountStr;@dynamic pointStr;@dynamic typeStr;@dynamic usernameStr;@dynamic stateStr;@end这四个文件都是系统可以生成的,不是那么注重,注意看字典和数组类型生成的是NSObject了。主要的是刚才命名的LocationDict,我们要生产一个类继承NSValueTransformer,对字典封装转换才能存储。
LocationDict.h:
//// LocationDict.h// InteractiveMarketingGameEx//// Created by shenkun on 16/11/3.// Copyright © 2016年 shenkun. All rights reserved.//#import <Foundation/Foundation.h>//继承NSValueTransformer@interface LocationDict : NSValueTransformer@endLocationDict.m:
//// LocationDict.m// InteractiveMarketingGameEx//// Created by shenkun on 16/11/3.// Copyright © 2016年 shenkun. All rights reserved.//#import "LocationDict.h"@implementation LocationDict+ (Class)transformedValueClass { //NSDictionary return [NSDictionary class];}+ (BOOL)allowsReverseTransformation { //标志 return YES;}- (id)transformedValue:(id)value { //转换成NSData保存到数据库 return [NSKeyedArchiver archivedDataWithRootObject:value];}- (id)reverseTransformedValue:(id)value { //转换NSData成当前类型 return [NSKeyedUnarchiver unarchiveObjectWithData:value];}@end
CoreData Mark文章
- CoreData存储NSDictionary、NSArray
- NSArray和NSDictionary只能存储对象
- ios数据存储NSString,NSArray,NSDictionary
- NSArray NSDictionary
- NSArray NSDictionary
- NSArray && NSDictionary
- NSString-->NSDictionary NSArray NSDictionary-->NSData
- NSDictionary,NSArray,NSPredicate,JSON
- NSArray,NSSet,NSDictionary
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary总结
- NSArray与NSDictionary使用
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary总结
- NSDictionary to NSArray
- NSArray NSSet NSDictionary
- NSDictionary,NSArray,NSSet
- NSArray,NSSet,NSDictionary总结
- 汪国新向媒体介绍宜昌“大义文化”
- jQuery Tooltip
- SpringMVC——接收请求参数和页面传参
- 用Qt写软件系列四:定制个性化系统托盘菜单
- QT TCP通讯
- CoreData存储NSDictionary、NSArray
- 装饰模式和桥接模式的区别
- Python
- Linux学习日志(10)- 编译内核make uImage出错“mkimage" command not found…”
- ARTSPConnection::onSendRequest
- 《艺术家眼中的新三峡》之三峡人家——集文旅融合之大成
- SylixOS iMX6平台I2C总线驱动
- Java1.8函数式接口
- C语言和Lua交互(三)