你的位置:小程序开发公司 > 小程序开发 > 小程序开发 iOS App开发中Core Data框架基本的数据解决功能小结

小程序开发 iOS App开发中Core Data框架基本的数据解决功能小结

时间:2024-07-16 14:46:32 点击:269 次

一、何为CoreData CoreData是一个突出用来解决数据的框架小程序开发,其在性能与书写简短上齐有很大的上风,在数据库解决方面,apple浓烈推选开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架不错减少开发者50%——70%的代码量,这固然有些夸张,但由此可见,CoreData着实荒谬雄伟。

二、蓄意数据模子 在iOS开发中,频繁使用SQL数据库对宽绰的表结构数据进行处理,然则SQL有一个荒谬显然的弱势,对于旧例数据模子的表,其处理起来是没问题的,举例一个班级表,其中每条数据中有班级称号,东说念主数这么的属性,一个学生表,其中每条数据有学生的姓名,性别,年岁这么的属性。然则要是要在表与表之间开辟计议,自界说对象与自界说对象之间产生隶属关系,使用SQL处理起来就荒谬劳苦了,举例要是这个班级表中有一个班长的属性,这个属性是一个学生类型。 1.创建实体类型过甚属性 使用Xcode创建一个工程,在工程中新建一个文献,采用Core Data分类中的DataModel创建,如下图:

201662393010769.png (732×519)

这时在Xcode的文献导航区会出现一个以xcdatamodeld为扩展名的文献,这个文献便是数据模子文献,点击Add Entity按钮添加一个实体类型,取名为SchoolClass,为这个类型添加两个属性,分辨为名字name和学生数目stuNum,如下图:

201662393043714.png (885×899)

2.对实体类型进行设立 在Xcode右侧的器具栏中不错对实体类型进行一些设立,选中一个实体类型,如下图:

201662393110376.png (259×571)

Name设立实体类型的称号,Abstract Entity设立是否是轮廓实体,要是勾选,小程序定制开发则此实体不成被实例化,只可被剿袭,一样于轮廓类,比如界说东说念主为一个实体类型,在界说剿袭于东说念主实体类型的淳厚、学生等来进行实例化。Parent Entity用来采用父类实体,Class用于设立对应的类的。

3.在实体对象之间开辟关系 再创建一个学生类实体Student,添加name和age两个属性。选中SchoolClass,在其中的Relationships模块中点击+号,来添加一个关系,如下图:

201662393139323.png (880×490)

这时,SchoolClass实体类型中就有了一个Student类型的班长属性。要是切换一下裁剪作风,不错愈加澄澈的看到实体类型之间的关系,如下图:

201662393202625.png (882×871)

app开发

4.对属性和关系进行设立 选中一个属性大略关系,在右侧的器具栏中不错对属性进行一些设立,如下图:

201662393221365.png (260×544)

name设立属性的名字,Optional类型代表可选,即在实例化对象时不错赋值也不错不赋值。Attribute设立属性的数据类型,Default Value设立数据的默许值。 二、数据模子解决类NSManagedObjectModel

通过NSManagedObjectModel,不错将创建的数据模子文献读取为模子解决类对象,使用如下形状: //获得.xcdatamodeld文献url NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"]; //读取文献 NSManagedObjectModel * mom = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl]; 其中还有一些属性和形状进行数据模子的解决:

奇偶形态判断:前面10期奖号中,包含全偶形态1期,两偶一奇形态2期,两奇一偶形态3期,全奇形态4期。

从组选号码0-9分布图可以看出:当前号码0、4走势最冷,遗漏9期,历史最大遗漏值分别为24期、22期,本期防止冷码同时解冻。

//将多个数据模子解决文献进行同一 + (nullable NSManagedObjectModel *)mergedModelFromBundles:(nullable NSArray<NSBundle *> *)bundles;  //将多个数据模子解决类对象进行同一 + (nullable NSManagedObjectModel *)modelByMergingModels:(nullable NSArray<NSManagedObjectModel *> *)models; //存放数据中扫数实体模子的字典 字典中是实体名和实体形容对象 @property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *entitiesByName; //存放数据中扫数实体形容对象 @property (strong) NSArray<NSEntityDescription *> *entities; //复返扫数可用的竖立称号 @property (readonly, strong) NSArray<NSString *> *configurations; //获得关联某个竖立的扫数实体 - (nullable NSArray<NSEntityDescription *> *)entitiesForConfiguration:(nullable NSString *)configuration; //为某个实体关联竖立 - (void)setEntities:(NSArray<NSEntityDescription *> *)entities forConfiguration:(NSString *)configuration; //创建苦求模板 - (void)setFetchRequestTemplate:(nullable NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name; //获得苦求模板 - (nullable NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name; 对于实体形容对象NSEntityDescription:

实体一样于数据库中的表结构,举例前次咱们创建的班级实体模子,一个实体模子中不错添加好多属性与关系,NSEntityDescription对象中存放这些信息,常用如下:

//实体地方的模子解决对象 @property (readonly, assign) NSManagedObjectModel *managedObjectModel; //实体地方的模子解决对象的称号 @property (null_resettable, copy) NSString *managedObjectClassName; //实体名 @property (nullable, copy) NSString *name; //设立是否是轮廓实体 @property (getter=isAbstract) BOOL abstract; //子类实体字典 @property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *subentitiesByName; //扫数子类实体对象数组 @property (strong) NSArray<NSEntityDescription *> *subentities; //父类实体 @property (nullable, readonly, assign) NSEntityDescription *superentity; //扫数属性字典 @property (readonly, copy) NSDictionary<NSString *, __kindof NSPropertyDescription *> *propertiesByName; //扫数属性数组 @property (strong) NSArray<__kindof NSPropertyDescription *> *properties; //扫数常类型属性 @property (readonly, copy) NSDictionary<NSString *, NSAttributeDescription *> *attributesByName; //所关系系 @property (readonly, copy) NSDictionary<NSString *, NSRelationshipDescription *> *relationshipsByName; //某个实体类型的所关系系 - (NSArray<NSRelationshipDescription *> *)relationshipsWithDestinationEntity:(NSEntityDescription *)entity; //判断是否是某种实体 - (BOOL)isKindOfEntity:(NSEntityDescription *)entity; NSPropertyDescription类是数据模子属性的父类,NSAttributeDescription和NSRelationshipDescription齐是剿袭于NSPropertyDescription类,NSAttributeDescription形容浅薄类型的属性,NSRelationshipDescription用于形容自界说类型的关系。

三、抓久化存储合营者类NSPersistentStoreCoordinator

NSPersistentStoreCoordinator开辟数据模子与腹地文献或数据库之间的计议,通过它将腹地数据读入内存大略将修悛改的临时数据进行抓久化的保存。其启动化与聚积数据抓久化给与对象形状如下:

//通过数据模子解决对象进行启动化 - (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model; //添加一个抓久化的数据给与对象 - (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error; //移除一个抓久化的数据给与对象 - (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;

四、数据对象解决盘曲文NSManagedObjectContext

NSManagedObjectContext是进行数据解决的中枢类,咱们通过这个类来进行数据的增点窜查等操作。其中常用形状如下:

//启动化形状 通过一个并发类型进行启动化 参数罗列如下: /* typedef NS_ENUM(NSUInteger, NSManagedObjectContextConcurrencyType) {     NSPrivateQueueConcurrencyType  = 0x01,//盘曲文对象与独到队伍关联     NSMainQueueConcurrencyType   = 0x02//盘曲文对象与主队伍关联 }; */ - (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct; //异步彭胀block - (void)performBlock:(void (^)())block; //同步彭胀block - (void)performBlockAndWait:(void (^)())block; //关联数据抓久化对象 @property (nullable, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator; //是否有未提交的蜕变 @property (nonatomic, readonly) BOOL hasChanges; //进行查询数据苦求 - (nullable NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error; //进行查询数据条数苦求 - (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error ; //插入元素 - (void)insertObject:(NSManagedObject *)object; //删除元素 - (void)deleteObject:(NSManagedObject *)object; //回滚一步操作 - (void)undo; //明晰缓存 - (void)reset; //修起数据 - (void)rollback; //提交保存数据 - (BOOL)save:(NSError **)error;

服务热线
官方网站:kswxzls.com
工作时间:周一至周六(09:00-18:00)
联系我们
QQ:2852320325
邮箱:w365jzcom@qq.com
地址:武汉东湖新技术开发区光谷大道国际企业中心
关注公众号

Powered by 小程序开发公司 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024 云迈科技 版权所有