iOS移动开发CoreDate讲解

----欢迎-------

在移动端开发,数据持久化保存是基本要素,没钱在2014年之后退出了coredate,本持久化基于oc作为开发,方便程序人员操作。与SQL数据库,MySQL相比,优点颇多。

1.首先,coredate不需要开发人员去操作数据复杂的一些语句,摆脱sql语句种种限制条件;

2.coredate使用,减少了开发人员对数据的管理,有NSManagedObjectContext托管上下文帮助开发人员去管理数据,当我们获取数据时由NSFetchedResultsController去代替程序人员捕做数据;

3.减少开发人员在项目工程里面对颇多数据库操作复杂语言,减少项目的内存在泄漏。2014年7月出xcode6测试版本后,coredate又进一步更新,稳定性更高。当然在项目中到底归结使用哪种数据持久化保存,还是看项目的架构,有公司制定。

下面我们看下coredate的使用方法;

当你使用coredate时,在APPdelegate.h文件里

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;//Context上下文意思,

@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;//这个程序员不掉用,而是coredata自己用的,将数据转sql命令

@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;//协调器,也不是我们调用的,

- (void)saveContext;//这个方法也不需要我们管

- (NSURL *)applicationDocumentsDirectory;//要管理目录的,也需要在沙盒里写入sql的文件,也不需要我们管理

在APPdelegate.m文件里

#pragma mark - Core Data stack

@synthesize managedObjectContext = _managedObjectContext;

@synthesize managedObjectModel = _managedObjectModel;

@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

- (NSURL *)applicationDocumentsDirectory {

// The directory the application uses to store the Core Data store file. This code uses a directory named "com.shangguan.guoqing.coredata__1_" in the application‘s documents directory.

return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

}

- (NSManagedObjectModel *)managedObjectModel {

// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.

if (_managedObjectModel != nil) {

return _managedObjectModel;

}

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"coredata__1_" withExtension:@"momd"];

//withExtension后面是扩展文件,是个工程目录的文件名字匹配的

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

return _managedObjectModel;

}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.

if (_persistentStoreCoordinator != nil) {

return _persistentStoreCoordinator;

}

// Create the coordinator and store

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coredata__1_.sqlite"];

NSError *error = nil;

NSString *failureReason = @"There was an error creating or loading the application‘s saved data.";

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

// Report any error we got.

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application‘s saved data";

dict[NSLocalizedFailureReasonErrorKey] = failureReason;

dict[NSUnderlyingErrorKey] = error;

error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];

// Replace this with code to handle the error appropriately.

// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

abort();

}

return _persistentStoreCoordinator;

}

- (NSManagedObjectContext *)managedObjectContext {

// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)

if (_managedObjectContext != nil) {

return _managedObjectContext;

}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];

if (!coordinator) {

return nil;

}

_managedObjectContext = [[NSManagedObjectContext alloc] init];

[_managedObjectContext setPersistentStoreCoordinator:coordinator];

return _managedObjectContext;

}

#pragma mark - Core Data Saving support

- (void)saveContext {

NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

if (managedObjectContext != nil) {

NSError *error = nil;

if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {

// Replace this implementation with code to handle the error appropriately.

// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

abort();

}

}

}

这是coredate生成的基本文件以及方法,不可盲目修改和删除。其中

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"coredata__1_" withExtension:@"momd"];

withExtension后面是扩展文件,是个工程目录的文件名字匹配的

下面我们看下coredate保存数据

//先获取上下文对象

NSLog(@"%@",NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]);

//UIApplication是程序运行你这个程序的时候都会给实力化一个UIApplication对象出来,UIApplication对象就代表你当前的程序,并且是唯一

可以这样去获取appdelegate里面的对象

AppDelegate * app  = [UIApplication sharedApplication].delegate;

NSManagedObjectContext * context = app.managedObjectContext;//将来负责管理数据的玩意,上下文

//所有实体类都继承与一个类,就是NSManagedObject,叫托管对象。这个时候我们需要实例化一个对象,但是不能直接实例化,需要托管对象建立连接,可以认为通过上下文建立一个空白的托管对象

/*1种方法

//这里需要借助NSEntityDescription实体描述类,相当于描述这个实体里面有什么东西。

NSManagedObject * manager = [NSEntityDescription insertNewObjectForEntityForName:@"Gooder" inManagedObjectContext:context];

//下面我门就要处理数据了,因为没有具体对应press类,所以对象都是父类子类的实例,自己扩展出来的属性无法使用点语法。manager是所有实体的父类,但是没有直接拿出来manager.age等属性,所以我们利用kvc来赋值

[manager setValue:self.textname.text forKey:@"name"];

[manager setValue:@(self.textage.text.intValue) forKey:@"age"];//其中@()代表把当前integer转化为nsnumber类型的

[manager setValue:self.textress.text forKey:@"addres"];

//保存上下文,此时NSManagedObject还没有保存到数据库里面呢,这个时候的对象状态叫瞬时态,啪,一断电就没了,就是没有保存上。我们要持久状态,就是保存

//此时咱们只需要调用一个方法,就会自动监测上下文有没有瞬时态对像,如果有就自动保存上,写进数据库里面

NSError * error = nil;

[context save:&error];

if (error == nil) {

NSLog(@"保存成功");

}else

{

NSLog(@"保存错误");

}

*/

//2.种方法

Gooder * gooder = [NSEntityDescription insertNewObjectForEntityForName:@"Gooder" inManagedObjectContext:context];

gooder.name = self.textname.text;

gooder.age = @(self.textage.text.intValue);

gooder.addres = self.textress.text;

NSError * error = nil;

[context save:&error];

if (error == nil) {

NSLog(@"保存成功");

[self.navigationController popViewControllerAnimated:YES];

}else

{

NSLog(@"保存错误");

}

时间: 2024-10-22 04:14:14

iOS移动开发CoreDate讲解的相关文章

iOS常用开发技巧

iOS开发过程中,总有那么一些个小问题让人纠结,它们不会让程序崩溃,但是会让人崩溃.除此之外,还将分享一些细节现在我通过自己的总结以及从其他地方的引用,来总结一下一些常见小问题. 本篇长期更新,多积累,多奉献,同时感谢其中一些文章的作者的整理,感谢! iOS高级开发实战讲解 这是我在网上搜索到的iOS高级开发实战讲解,由于原文不是很方便浏览,所以我在这里整理一部分出来,方便查阅,同时谢谢原作者. 这里我不是每一个都收录进来,这里只是放出一部分,有些用的太多,我就没整理了,大家如果想看可以去看原文

iOS/mac开发的一些知名个人博客

王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat.com池 建强的博客: 池建强,70后程序员,Blogger.98年毕业,先后就职于洪恩软件.RocketSofeware和用友软件工程公司(后更名为瑞友 科技),现任瑞友科技IT应用研究院副院长.该博客最初每天发送一条Mac技巧,不过目前已经形成了一种技术和人文结合的风格,时而随笔,时而技术.h

iOS多线程开发——NSThread浅析

在IOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,可以参考<iOS多线程开发--NSOperation/NSOperationQueue浅析><iOS多线程开发--GCD的使用与多线程开发浅析>.以及对于多线程中的同步异步,并行串行等概念,我在<GCD实践--串行队列/并发队列与iOS多线程详解>中也有较为详细的讲解.为了学习的完整性,今天我们主要从代码层面来实现

史上最全最完整的IOS 游戏开发 PDF电子书定制下载

<iOS 5游戏开发>作者:(新西兰)James·Sugrue著 页数:191 出版社:北京市:人民邮电出版社 出版日期:2012.08 简介:<iOS5游戏开发>是一本iOS5游戏开发的基础入门书.全书使用通俗易懂的简单实例,带领读者经历构建经典动作游戏的整个周期.读者在本书的阅读过程中,将经历从开发概念.规划设计一直到编写实际代码的全过过程.本书的每一章,都将演示游戏创建过程中的一个逻辑步骤,读者将在其中学习如何创建Sprite,用触摸屏.重力感应器和屏幕游戏棒控制玩家角色等-

iOS 游戏开发 博客

1. http://www.cnblogs.com/kesalin/archive/2012/11/10/ios_game_dev_resource.html   ( iOS游戏开发教程) 最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它对应的开发工具,尤其是 “ParticleDesigner”,粒子系统编辑器,非常的喜欢(需付费$7.99美元

IOS网络开发NSURLSession详解(一)概述

原创blog,转载请注明出处blog.csdn.net/hello_hwc 我的IOS-SDK详解专栏,欢迎关注 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言: 这个IOS网络编程的系列计划6篇文章,NSURLSession3篇(一篇概述,一篇详细阐述三种task和delegate的使用,一篇阐述授权,证书等内容),网络的基础知识两篇(一篇REST API讲解已经写完了,一篇我会把写博客的过程中遇到的概念总结出来

iOS企业级开发初级课程-表视图(13集)

首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜索栏.分组的使用.然后我们学习了如何对表视图单元格进行删除.插入.移动等操作.最后本章向大家介绍了表视图UI设计模式方面的内容. 序号 技术点 1 表视图-1-表视图介绍 2 表视图-2-简单表视图 3 表视图-3-简单表视图下 4 表视图-4-自定义单元格 5 表视图-5-搜索栏-1 6 表视图-

iOS 8开发指南

这篇是计算机类的优质预售推荐>>>><iOS 8开发指南(第2版)> 国内第一本iOS8开发的原创图书全新改版 objective-c和swift双语讲解 全部实例视频 涵盖WatchKit HealthKit HomeKit三大热门框架 内容简介 本书共35章,循序渐进地讲解了iOS 8应用开发的基本知识.本书从搭建开发环境讲起,依次讲解了Objective-C语言基础.Swift语言基础.Cocoa Touch.Xcode Interface Builder界面开发

30分钟学会iOS 11开发环境xcode 9图文教程

关注微信公众号[异步图书]每周送书 Xcode是一款功能全面的应用程序,通过此工具可以轻松输入.编译.调试并执行Objective-C程序.如果想在Mac上快速开发iOS应用程序,则必须学会使用这个强大的工具的方法.在本文容中,将详细讲解Xcode 9开发工具的基本知识,为读者步入本书后面知识的学习打下基础. 1.1 基本面板介绍 使用Xcode 9打开一个iOS 11项目后的效果如图1-1所示. 图1-1 打开一个iOS 11项目后的效果(1)调试区域:左上角的这部分功能是控制程序编译调试或者