coredata基础用法1(附coredata demo)

一、概念

1.Core Data 是数据持久化存储的最佳方式

2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型

在Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式

3.好处:能够合理管理内存,避免使用sql的麻烦,高效

4.构成:

(1)NSManagedObjectContext(被管理的数据上下文)

操作实际内容(操作持久层)

作用:插入数据,查询数据,删除数据

(2)NSManagedObjectModel(被管理的数据模型)

数据库所有表格或数据结构,包含各实体的定义信息

作用:添加实体的属性,建立属性之间的关系

操作方法:视图编辑器,或代码

(3)NSPersistentStoreCoordinator(持久化存储助理)

相当于数据库的连接器

作用:设置数据存储的名字,位置,存储方式,和存储时机

(4)NSManagedObject(被管理的数据记录)

相当于数据库中的表格记录

(5)NSFetchRequest(获取数据的请求)

相当于查询语句

(6)NSEntityDescription(实体结构)

相当于表格结构

(7)后缀为.xcdatamodeld的包

里面是.xcdatamodel文件,用数据模型编辑器编辑

编译后为.momd或.mom文件

5.依赖关系

二、基于SQLite数据库时,Core Data的简单使用


1 创建project



添加framework    coredata.framework



2 创建mod文件


3创建实例

Person 相当于表名

age 是表中字段,可以设定数据类型

relationship 关联其他表

4 创建model




三 代码举例

(1)appdelegate

初始化managedObjectContext,managedObjectModel,persistentStoreCoordinator,如果创建工程的时候勾选了coredata,那么以下代码会自动生成

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;

@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;

- (NSURL *)applicationDocumentsDirectory;

@end

@implementation AppDelegate

@synthesize managedObjectContext = __managedObjectContext;

@synthesize managedObjectModel = __managedObjectModel;

@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

- (void)saveContext

{

NSError *error = nil;

NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

if (managedObjectContext != nil) {

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

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

abort();

}

}

}

- (NSURL *)applicationDocumentsDirectory

{

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

}

- (NSManagedObjectContext *)managedObjectContext

{

if (__managedObjectContext != nil) {

return __managedObjectContext;

}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];

if (coordinator != nil) {

__managedObjectContext = [[NSManagedObjectContext alloc] init];

[__managedObjectContext setPersistentStoreCoordinator:coordinator];

}

return __managedObjectContext;

}

- (NSManagedObjectModel *)managedObjectModel

{

if (__managedObjectModel != nil) {

return __managedObjectModel;

}

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

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

return __managedObjectModel;

}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

if (__persistentStoreCoordinator != nil) {

return __persistentStoreCoordinator;

}

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

NSError *error = nil;

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

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

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

abort();

}

return __persistentStoreCoordinator;

}

(2)增删改查例子

- (IBAction)add:(id)sender {

Person *mPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:defaultContext];

mPerson.firstname = @"Li";

mPerson.age = @17;

NSError *error;

if (![defaultContext save:&error]) {

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

}

}

- (IBAction)delete:(id)sender {

Person *mPerson = [self qury];

[defaultContext deleteObject:mPerson];

NSError *error;

if (![defaultContext save:&error]) {

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

}

}

- (IBAction)update:(id)sender {

Person *mPerson = [self qury];

mPerson.firstname = @"Huang";

mPerson.age = @16;

NSError *error;

if (![defaultContext save:&error]) {

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

}

}

- (IBAction)search:(id)sender {

Person *mPerson = [self qury];

NSLog(@"%@",mPerson.firstname);

}

- (Person *)qury

{

NSFetchRequest *request = [[NSFetchRequest alloc] init];

// 设置要查询的实体

request.entity = [NSEntityDescription entityForName:@"Person"

inManagedObjectContext:defaultContext];

// 设置排序(按照age降序)

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

request.sortDescriptors = [NSArray arrayWithObject:sort];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname = ‘%@‘", @"Li"];

request.predicate = predicate;

// 执行请求

NSError *error = nil;

NSArray *objs = [defaultContext executeFetchRequest:request error:&error];

if (error) {

[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];

}

// 遍历数据

for (Person *obj in objs) {

NSLog(@"firstname=%@", obj.firstname);

}

if ([objs count]) {

Person *mperson = objs[0];

return mperson;

}

return nil;

}

四 查看数据库

1 sqlite路径 路径appdelte里面storeUrl

2 使用coredata会生成三个文件 sqlite,shm,wal

3 在decument里面打开sqlite文件,可查看表

部分内容参照月光的尽头 博客,http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html

转载请注明出处

时间: 2024-07-30 01:24:21

coredata基础用法1(附coredata demo)的相关文章

关于CoreData的用法

有些同事觉得CoreData是一个看不懂,理解不清的神秘东东,其实ios的本地数据储存是一个sqlite数据库,一个简易的数据库,而这个CoreData是否支持所有储存的数据呢,显然不是的,站在我的角度,我是不支持把一些图片数据保存的CoreData里面,其一,如果保存图片需要把图片转化为Data类型,    UIImage * image = info[UIImagePickerControllerEditedImage];    //把Image转化成Data    self.imageDa

玩转Android Camera开发(五):基于Google自带算法实时检测人脸并绘制人脸框(网络首发,附完整demo)

本文主要介绍使用Google自带的FaceDetectionListener进行人脸检测,并将检测到的人脸用矩形框绘制出来.本文代码基于PlayCameraV1.0.0,在Camera的open和preview流程上进行了改动.原先是放在单独线程里,这次我又把它放到Surfaceview的生命周期里进行打开和开预览. 首先要反省下,去年就推出了静态图片的人脸检测demo,当时许诺一周内推出Camera预览实时检测并绘制的demo,结果拖到现在才整.哎,屌丝一天又一天,蹉跎啊.在demo制作过程中

Cocos2d-x数据篇06:SQLite3数据库基础用法

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2430 [前言] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也

sass基础用法

sass基础用法 SASS是什么 传统的CSS是一种单纯的描述性样式文件,然而SASS可以对CSS进行预编译处理. 在SASS源码中可以使用变量.函数.继承等动态语言的特性,并且可以编译成CSS文件. 安装与使用 安装 由于sass是ruby写的,所以想要使用sass就需要安装ruby环境.然后再使用gem安装sass. 输入下面的命令进行安装sass: gem install sass 可以使用sass -v命令查看sass的版本. 使用 新建一个后缀名为.scss源码文件,就可以编辑sass

游标基础用法

Create PROCEDURE P_InsertSubject@SubjectId intASDECLARE rs CURSOR LOCAL SCROLL FORselect studentid from student where StudentGradu = 1OPEN rsFETCH NEXT FROM rs INTO @tempStudentIDWHILE @@FETCH_STATUS = 0BEGINInsert SelSubject values (@SubjectId,@temp

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

[转帖]15+ 个 tar 命令的用法,附示例

15+ 个 tar 命令的用法,附示例 http://www.oschina.net/question/12_146379 4月23日 武汉 OSC 源创会 —— ES6开发体系实践>>> »   tar 命令用来将很多文件打包成一个单一的磁带或者磁盘归档,并可从归档文件恢复出文件列表.当你需要通过 email 发送大量文件时或者传输文件时非常有用.这里我们介绍一些基本的使用场景. tar 的语法: ? 1 # tar [options] file.tar file1 file2 ..

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

2017.04 vue学习笔记---08表单控件绑定---基础用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> div{ margin-bottom: 30px; } </style> <script src="js/vue.js"></script> <