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@end
MyFavTaskEntity+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_END
MyFavTaskEntity+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@end
LocationDict.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文章


0 0
原创粉丝点击