CoreData使用基础教程
来源:互联网 发布:sql多行合并相同条件 编辑:程序博客网 时间:2024/05/16 12:21
CoreData提供了一种简便的对象持久化管理方法,使你可以不用关心数据的存储,只需要关心对象的增加、删除、更改、读写。
基本概念
托管对象(managed object)
一个托管对象代表你想要保存到数据存储中的一个对象。这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性。
数据存储(data store)
Core Data支持4中类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore。
托管对象上下文(managed object context)
托管对象上下文类似于应用程序和数据存储之间的一块缓冲区。这块缓冲区包含所有未被写入数据存储的托管对象。你可以添加、删除、更改缓冲区内的托管对象。在很多时候,当你需要读、插入、删除对象时,你将会调用托管对象上下文的方法。
持久化存储协调器(persistent store coordinator)
持久化存储协调器处理到数据存储的连接,并且包含一些底层信息,像用到数据存储的名字和位置。这个类通常被托管对象上下文用到。
托管对象模型(managed object model)
托管对象模型是一个类,这个类包含每一个你想存储到数据存储中的托管对象的定义。
大概是这样一种层次关系:
大概是这样一种层次关系:
使用CoreData
1 在你可以读或写模型对象到当前数据存储之前,你需要实例化托管对象模型、托管对象上下文、持久化存储协调器。
托管对象模型由NSManagedObjectModel类的一个实例表示。在一个工程中我们只需要为所有的.xcdatamodeld文件实例化一个对象。
NSManagedObjectModel* managedObjectModel = [NSManagedObjectModel
mergedModelFromBundles:nil];
mergedModelFromBundles: 搜索工程中所有的.xcdatamodeld文件,并加载所有的实体到一个NSManagedObjectModel 实例中。
这样托管对象模型知道所有当前工程中用到的托管对象的定义
2 有了托管对象模型实例之后,我们就可以创建一个持久化协调器实例了。持久化协调器处理到数据存储的连接。大概是处理怎么把对象写到数据存储或怎么从数据存储读对象吧。
3 有了持久化协调器实例之后,我们需要提供一个数据存储给它管理。你可以通过发送addPersistentStoreWithType:configuration:URL:options:error:消息来实现。
4 最后一步就是实例化托管对象上下文。有了托管对象上下文,你就可以方便的管理对象了。
下面是使用的实例代码:
1 初始化
-(void) viewDidLoad中
//创建管理对象模型 objectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; // 创建持久化数据存储协调器 coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel]; // 添加数据存储 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // 创建一个SQLite数据库作为数据存储 NSString *documentsDir = [paths objectAtIndex:0]; NSString *filePath = [documentsDir stringByAppendingPathComponent:@"datastore.sqlite"]; NSURL *databaseURL = [NSURL fileURLWithPath:filePath]; NSError *error = nil; [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:databaseURL options:nil error:&error]; // 创建托管对象上下文 objectContext = [[NSManagedObjectContext alloc] init]; [objectContext setPersistentStoreCoordinator:coordinator];
2 添加对象
NSString* newName = nameField.text; NSString* newPhone = phoneField.text; NSString* newPostcode = postcodeField.text; ContactData *newContact = (ContactData *)[NSEntityDescription insertNewObjectForEntityForName:@"ContactData" inManagedObjectContext:objectContext]; newContact.customerName = newName; newContact.phoneNumber = newPhone; newContact.postCode = newPostcode; NSError* error; if ([objectContext save:&error]) { [self fetchExistingContactData]; [tableofcontacts reloadData]; }
3 访问对象
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"ContactData" inManagedObjectContext:objectContext]; [fetchRequest setEntity:entityDescription]; NSError* error; existingContacts = [objectContext executeFetchRequest:fetchRequest error:&error];
0 0
- CoreData使用基础教程
- CoreData使用基础教程
- CoreData使用
- CoreData 使用
- 使用CoreData
- CoreData使用
- CoreData使用
- CoreData使用
- CoreData 使用
- CoreData 使用
- Coredata使用
- CoreData 欢迎来到CoreData 使用。
- iOS基础教程:iOS-UI-CoreData学习笔记
- CoreData NSPredicate在CoreData中的使用
- CoreData使用须知
- CoreData的使用
- CoreData简单使用
- coreData 使用分析
- 第五章重点之man与关机命令
- 这几天的面试感悟
- Linux C下的shell命令调用
- iOS 开发小技巧-持续更新~
- cocos2dx - lua 中实现遮罩层和屏蔽层
- CoreData使用基础教程
- Linux 虚拟文件系统支持的文件系统类型-3----sysfs && procfs
- Memcached缓存雪崩现象
- POJ 1026 Cipher
- Linux中的awk命令中的NR何FNR的区别
- MongoDB Windows环境安装及配置
- 贪婪算法
- db的简单使用和gdb+gdbserver方式进行ARM程序调试
- (3) 面向对象一之类和对象、成员变量和局部变量、继承、封装、多态