iOS- CoreData 数据库管理
来源:互联网 发布:淘宝小铺名称能改吗 编辑:程序博客网 时间:2024/05/16 15:33
- 1.前文 Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据除了开头的准备工作略微繁琐点,后面的操作都很方便。而且在CoreData在数据操作过程中,无需编写任何SQL语句,这一点和JAVA里的hibernate框架类似。2.CoreData实现的主要步骤2.1.要使用Core Data,首先需要导入CoreData框架表结构:NSEntityDescription表记录:NSManagedObject数据库存放方式:NSPersistentStoreCoordinator(持久化存储协调者)数据库操作:NSManagedObjectContext(被管理的对象上下文)2.2.接着要使用Code Data,首先需要定义模型文件,描述应用程序中的所有实体(Entities)2.3.创建连接数据库首先需要创建一个操作数据库的上下文。NSManagedObjectContext操作数据库的上下文需要设置一个调度者属性,这个调度者是用来将图形化建立的模型和数据库联系起来。给调度者添加一个需要联系的数据库。1 // Merging合并可以将图形化建立的所有Model汇总到一个数据库文件中2 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];34 // 调度者的实例化,需要Model5 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];67 // 数据库是一个文件,持久化连接的文件8 NSError *error = nil;9 NSURL *url = [@"my.db" appendDocumentDirURL];1011 // 添加持久化存储的数据库12 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];1314 if (error == nil) {15 NSLog(@"数据库建立成功");1617 // 获取到数据库操作的上下文,类似于SQLite的句柄18 _sharedContext = [[NSManagedObjectContext alloc] init];1920 // 让上下文记录住存储调度21 _sharedContext.persistentStoreCoordinator = store;22 } else {23 NSLog(@"数据库建立失败");24 }2.4.添加,更新,删除添加:1.新建实体 INST (插入)1 Person *p = [[Person alloc] init]2.设置实体的属性1 // 设置对象内容2 person.name = _nameText.text;3 person.phoneNo = _phoneText.text;4 person.qq = _qqText.text;5 person.weibo = _weiboText.text;3.保存上下文1 //实体描述2 [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]34 // 获取上下文5 NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];67 // 让上下文保存8 if ([context save:nil]) {9 NSLog(@"保存成功");1011 // 返回上级视图控制器12 [self.navigationController popViewControllerAnimated:YES];13 } else {14 NSLog(@"保存失败!");15 }更新:1.判断是否已有一模一样的模型//判断Person *person = _editPerson;// 如果person == nil表示是新建用户if (person == nil) {person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];}2.设置实体属性person.name = _nameText.text;person.phoneNo = _phoneText.text;person.qq = _qqText.text;person.weibo = _weiboText.text;3.保存上下文1 // 让上下文保存2 if ([context save:nil]) {3 NSLog(@"保存成功");45 // 返回上级视图控制器6 [self.navigationController popViewControllerAnimated:YES];7 } else {8 NSLog(@"保存失败!");9 }删除// 1. 首先找到要删除哪条记录Person *person =1 // 2. 删除2 NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];34 // 让上下文删除5 [context deleteObject:person];67 // 上下文保存8 if ([context save:nil]) {9 NSLog(@"删除成功!");10 } else {11 NSLog(@"删除失败!");12 }2.4.查询三.查询1.使用NSFetchedResultsController控制器// 查询结果控制器NSFetchedResultsController *_fetchedResultsController;2.监控managed object context对象的改变,报告给delegate1 // 设置代理2 _fetchedResultsController.delegate = self;2.1当操作数据上下文的内容改变的时候,会自动调用抓取结果控制器的代理方法1 #pragma mark 查询结果控制器代理方法2 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller3 {4 // 新增、修改、删除5 [self.tableView reloadData];6 }3.创建控制器一般来说,你会创建一个NSFetchedResultsController实例作为tableview的成员变量。初始化的时候,你提供四个参数:1。 一个fetchrequest.必须包含一个sortdescriptor用来给结果集排序。2。 一个managedobject context。 控制器用这个context来执行取数据的请求。3。 一个可选的keypath作为sectionname。控制器用keypath来把结果集拆分成各个section。(传nil代表只有一个section)4。 一个cachefile的名字,用来缓冲数据,生成section和索引信息。1 NSFetchRequest *reqest = _fetchedResultsController.fetchRequest;1 1> 查询请求2 2> 数据库上下文3 3> 表格中用于分组的字段名4 4> 缓存名称5 */6 _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];5.注意:一定要执行抓取请求,返回的数据在sections里,这个数组中装的都是遵守NSFetchedResultsSectionInfo这个协议的对象。通过numberOfObjects就能获取一组有多少数据对象了。1 return [_fetchedResultsController.sections[0] numberOfObjec
t
0 0
- iOS- CoreData 数据库管理
- iOS- CoreData 数据库管理利器!
- iOS- CoreData 数据库管理利器!
- IOS coredata数据库操作
- ios数据库CoreData
- iOS 数据库-SQLite3 CoreData FMDB
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- iOS App升级安装 - CoreData数据库升级
- 数据库 - ios中的coredata的使用
- iOS SQLite、CoreData、FMDB数据库详解
- IOS-Coredata 核心数据库的基础使用
- iOS CoreData数据库之创建详解
- iOS CoreData数据库之创建详解
- Filter (一)
- NativeActivity 使用那个 Tracer for OpenGL ES
- adapter和listview
- 数列通项的求法(一)
- Makefile自动依赖
- iOS- CoreData 数据库管理
- hdu1230 火星A+B
- Phalcon+PHP+win8.1+iis fastcgi+配置
- Cocos2d-x实现简易翻牌效果
- 关于路由中多点双发布路由时候出现路由环路的问题
- 常用js脚本 AJAX 手机号验证 限制checkbox 勾选个数 利用AJAX 做电话号码验证
- Candy
- unp代码在ubuntu10.04中需要作的更改
- 关于Android lint