封装CoreManager类

@implementation CoreDataManager

{

//上下文

NSManagedObjectContext *_ctx;

}

//单例

+(instancetype)sharedManager

{

static CoreDataManager *manager = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

manager = [[CoreDataManager alloc] init];

});

return manager;

}

//初始化时,同事初始化相关的

-(instancetype)init

{

self = [super init];

if (self) {

//初始化上下文对象

//1.关联实体描述文件(User.xcdatamodeld)

//扩展名写@“momd”

NSString *path = [[NSBundle mainBundle] pathForResource:@"GuoFuBao" ofType:@"momd"];

NSURL *url = [NSURL fileURLWithPath:path];

NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

//2.关联数据库文件

NSPersistentStoreCoordinator *coor = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

//数据库文件的路径

NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/gfb.sqlite"];

NSLog(@"path=%@",dataPath);

NSURL *dataUrl = [NSURL fileURLWithPath:dataPath];

//CoreData管理的数据库文件升级时传参

NSDictionary *optionDict = @{NSMigratePersistentStoresAutomaticallyOption:[NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption:[NSNumber numberWithBool:YES]};

[coor addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:dataUrl options:optionDict error:nil];

//3.上下文对象

_ctx = [[NSManagedObjectContext alloc] init];

_ctx.persistentStoreCoordinator = coor;

}

return self;

}

增(插入)

//插入数据
- (IBAction)insertData{
NSLog(@"插入数据");
//创建模型数据模型
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.managedContext];
student.name = @"张三2";
student.id = @(11); Book *book = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:self.managedContext];
book.bookID = @(121);
book.bookName = @"<老人与海2>"; student.book = book; Student *student2 = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.managedContext];
student2.name = @"李四2";
student2.id = @(23); Book *book2 = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:self.managedContext];
book2.bookID = @(242);
book2.bookName = @"<飞鸟集2>"; student2.book = book2; //保存,用 save 方法
NSError *error = nil;
BOOL success = [self.managedContext save:&error];
if (!success) {
[NSException raise:@"访问数据库错误" format:@"%@",[error localizedDescription]];
}
}

删(删除)

//删除
- (IBAction)removeData:(id)sender{ NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; //查到到你要删除的数据库中的对象
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@",@"张三2"];
request.predicate = predic; //请求数据
NSArray *objs = [self.managedContext executeFetchRequest:request error:nil]; for (Student *stu in objs) {
[self.managedContext deleteObject:stu];
} [self.managedContext save:nil];
}

/读取数据库文件
- (IBAction)readData{
NSLog(@"读取数据");
dispatch_async(dispatch_get_main_queue(), ^{ // 初始化一个查询请求
// NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 设置要查询的实体
// request.entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedContext]; //以上代码简写成下边
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; // 设置排序(按照age降序)
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO];
request.sortDescriptors = [NSArray arrayWithObject:sort];
// 设置条件过滤(搜索name中包含字符串"zhang"的记录,注意:设置条件过滤时,数据库SQL语句中的%要用*来代替,所以%Itcast-1%应该写成*zhang*)
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", @"*zhang*"];
// request.predicate = predicate; // 执行请求
NSError *error = nil;
NSArray *objs = [self.managedContext executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
} NSLog(@"-----------------------------------");
// 遍历数据
int index = 0;
for (NSManagedObject *obj in objs) {
NSLog(@"%d---name=%@", index++,[obj valueForKey:@"name"]);
} for (Student *stu in objs) {
Book *book = stu.book;
NSLog(@"%@---name=%@", stu.name,book.bookName);
} });
}

改(更新)

//更新数据
- (IBAction)modifyData{
// 如果是想做更新操作:只要在更改了实体对象的属性后调用[context save:&error],就能将更改的数据同步到数据库
//先从数据库中取出所有的数据,然后从其中选出要修改的那个,进行修改,然后保存 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; //设置过滤条件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"李四2"];
request.predicate = pre; NSError *error = nil;
NSArray *objs = [self.managedContext executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
} // 2.更新身高
for (Student *stu in objs) {
stu.name = @"被修改的新名字";
} //保存,用 save 方法
BOOL success = [self.managedContext save:&error];
if (!success) {
[NSException raise:@"访问数据库错误" format:@"%@",[error localizedDescription]];
} }

/////////////////////****************************************************************************************/////////////////////

//已存在的项目,使用 CoreData ,步骤:

来自:    http://blog.csdn.net/wolaikanyanhau/article/details/50752704

一.  首先需要引入CoreData FrameWork . 点击Build Phases,在下面的界面中找到LinkBinary With Libraries。

二. 创建 DataModel

三. 在 AppDelagate 加入相关代码(或者自己创建工具类)

四. 在DataModel中创建相应实体Entity

五.创建托管类模型.h.m 文件:(选中momd, 菜单栏 Editor--> NSManagedObject Subclass)

//创建完.h.m 文件后,可能会报错,在链接库哪里删掉. m 或者删掉 momd 文件即可修复    链接:    http://www.jianshu.com/p/8dd276722151

/////////////////////****************************************************************************************/////////////////////

//CoreData 数据库升级

来自:  http://blog.csdn.net/SoundsGood/article/details/49365491

如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表、字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下:

1.选中你的mydata.xcdatamodeld文件,选择菜单editor->Add Model Version  比如取名:mydata2.xcdatamodel

2.设置当前版本

选择上级mydata.xcdatamodeld ,在inspector中的Versioned Core Data Model选择Current模版为mydata2

3.修改新数据模型mydata2,在新的文件上添加字段及表

4.删除原来的类文件,重新生成下类。

CoreData 数据库的更多相关文章

  1. iOS - CoreData 数据库存储

    1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...

  2. CoreData数据库

        一  CoreData 了解 1 CoreData 数据持久化框架是 Cocoa API 的一部分,首先在iOSS5 版本的系统中出现:      它允许按照 实体-属性-值 模式组织数据: ...

  3. CoreData数据库迁移的操作

    CoreData数据库迁移操作步骤,操作是基于Xcode7. 1.添加新的数据库.选中当前数据库版本:Editor->Add Model Verson,创建一个新的数据库版本. 2.Comman ...

  4. iOS coredata 数据库升级 时报Can't find model for source store

    在coredata 数据库结构被更改后,没根据要求立即建立新version,而是在原version上进行了小修改,之后才想起来建立新版本.并通过以下代码合并数据库, NSError *error = ...

  5. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  6. CoreData数据库升级

    如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下: 1.选中你的mydata.xc ...

  7. iOS:CoreData数据库的使用四(数据库和UITableViewController以及NSFetchedResultsController一起使用)

    CoreData数据库虽然可以和tableview或者UITableViewController一起使用将数据显示在表格上,但是在准备数据的时候,这种方式需要用一个可变数组来装从数据库一次性取出来的所 ...

  8. iOS:CoreData数据库的使用三(数据库和tableView表格一起使用)

    CoreData数据库是用来持久性存储数据的,那么,我们再从该数据库中取出数据干什么呢?明显的是为了对数据做操作,这个过程中可以将它们直观的显示出来,即通过表格的形式显示出来.CoreData配合ta ...

  9. iOS:CoreData数据库的使用二(创建多个数据库表,表之间有对应关系)

    CoreData数据库框架是一个封装性好,功能强大数据库,它底层使用的还是sqlite数据库,不过苹果公司在其基础上,为其封装新和安全性的维护上做了大量的处理,例如对一些事物做了详细的操作,如读脏数据 ...

  10. iOS:CoreData数据库的使用一(创建单个数据库表)

    CoreData数据库框架:mac系统自带的数据库,它是苹果公司对sqlite进行封装而来的,既提供了对数据库的主要操作,也提供了具体的视图关系模型. 需要用到三个对象: 1•Managed Obje ...

随机推荐

  1. create-react-app脚手架中配置sass

    本文介绍如何在react中配置sass 首先将你的文件名称改成scss结尾的文件 然后安装依赖 cnpm install sass-loader node-sass --save-dev 找到node ...

  2. 简单的触发黑名单阻断演示 control+c

    #include "stdafx.h"#include <signal.h>#include <windows.h> #include <iostre ...

  3. leetcode423

    public class Solution { public string OriginalDigits(string s) { ]; ; i < s.Length; i++) { char c ...

  4. 部署和调优 2.5 tomcat配置和优化

    配置文件 vim /usr/local/tomcat/conf/server.xml 修改 <Connector port=" protocol="HTTP/1.1" ...

  5. Java陷阱一箩筐----面试题集及解答

    Java陷阱一箩筐----面试题集及解答 面试是没什么道理可讲的,它的题目有的不合情理.脱离实际.有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少. 当然这些都是Java的基本题,那 ...

  6. TS封装格式

    ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多达十几个,视频格式主要是mpeg2.苹果公司发明的http live stream流媒体是基于ts文件的,不过他大大简化了传统的ts流,只 ...

  7. hadoop-2.7.3.tar.gz + spark-2.0.2-bin-hadoop2.7.tgz + zeppelin-0.6.2-incubating-bin-all.tgz(master、slave1和slave2)(博主推荐)(图文详解)

    不多说,直接上干货! 我这里,采取的是ubuntu 16.04系统,当然大家也可以在CentOS6.5里,这些都是小事 CentOS 6.5的安装详解 hadoop-2.6.0.tar.gz + sp ...

  8. byte[] 的toString() 和 new String(byte[]) 的区别

    今天在Android上测试压缩和解压缩. 获得压缩后的byte[]数组后,直接用 byte[].toString()方法取得字符串. 然后用这个字符串再反向来解压缩,还原数据.却发现还原回来的字符串有 ...

  9. solr :term 查询, phrase查询, boolean 查询

    搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...

  10. matlab基础功能实践

    一.matlab在高等数学中的应用(<数学建模算法与应用>P453) 1.求极限 syms x b=limit((sqrt(1+x^2)-1)/(1-cos(x))) syms x a b ...