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

在移动端开发,数据持久化保存是基本要素,没钱在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(@"保存错误");

}

注意:这里的  [context save:&error];是保存

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

  1. iOS常用开发技巧

    iOS开发过程中,总有那么一些个小问题让人纠结,它们不会让程序崩溃,但是会让人崩溃.除此之外,还将分享一些细节现在我通过自己的总结以及从其他地方的引用,来总结一下一些常见小问题. 本篇长期更新,多积累 ...

  2. 简单讲解iOS应用开发中的MD5加密的相关使用

      简单讲解iOS应用开发中的MD5加密的相关使用   作者:文顶顶 字体:[增加 减小] 类型:转载 时间:2015-12-19 我要评论 这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用, ...

  3. 简单讲解iOS应用开发中的MD5加密的相关使用<转>

    这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用,示例代码基于传统的Objective-C,需要的朋友可以参考下 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POS ...

  4. iOS多线程开发

    概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...

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

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

  6. iOS移动开发周报-第24期

    iOS移动开发周报-第24期 [摘要]:本期iOS移动开发周报带来如下内容:苹果更新了iTunes Connect的设计.UIKit Dynamics 教程:抛掷 Views.iOS APP 架构漫谈 ...

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

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...

  8. iOS 11开发教程(二十一)iOS11应用视图美化按钮之实现按钮的响应(1)

    iOS 11开发教程(二十一)iOS11应用视图美化按钮之实现按钮的响应(1) 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应 ...

  9. iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观

    iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观 美化按钮说白了就是对按钮的属性进行设置,设置按钮的属性有两种方法:一种是使用编辑界面中的属性检查器:另一种是使用代码进行设置.以 ...

随机推荐

  1. thinkphp5.0--编写api,返回json格式

    前几天没有写php代码,今天写了一下,今天的任务主要是构建自己的异常体系类,出现一个问题,就是返回结果不是json格式,而是一个页面,我找了一两个小时,没有找到问题,以为代码的问题,用断点调试了一通, ...

  2. Spring Security框架下Restful Token的验证方案

    项目使用Restful的规范,权限内容的访问,考虑使用Token验证的权限解决方案. 验证方案(简要概括): 首先,用户需要登陆,成功登陆后返回一个Token串: 然后用户访问有权限的内容时需要上传T ...

  3. vue 基础重要组件 模板指令 事件绑定

    组件:data methods watch new vue({ data:{ a:1, b:[] }, methods:{ dosomething:function(){ this.a++; } }, ...

  4. Python 汉诺塔

    在汉诺塔游戏中,有三个分别命名为A.B.C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每个原盘中间有一个小孔.最初,所有得圆盘都在A塔座上,其中最大得圆盘在最下面,然后是第二大,以此类推. 游戏 ...

  5. java 注解 知识整理

    一.前言 注解(也称为元数据)为我们在代码中添加信息提供了一种方法,它在 一定程度上将元数据与源代码文件结合在一起.它是从java 5 开始引入的.通过使用注解,我们可以将元数据保存在Java源代码之 ...

  6. REST SOAP Thrift 对比

    别人的REST SOAP Thrift对比: 单项分数越高越好 项目 REST SOAP Thrift Extensibility 5 3 1 Neutrality 2 4 3 Independenc ...

  7. 加密算法HASH和MD5模块hsahlib

    HASH Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出, ...

  8. vue原生table合并单元格并可编辑

    <template> <div> <div class="el-card box-card table_container"> <div ...

  9. URL编码表 Base64编码表 HTTP消息含义

    URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5   tab 9% B 42% b 62% « %AB Ö %D6   linefeed %0A C 43% c ...

  10. [随笔][Java][修改pom仓库库为阿里云]

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...