王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.前文上次用SQLite3实现了数据管理,这次准备用CoreData来实现。

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

相比SQLite3来说,用CoreData更有利于程序员来管理数据,

除了开头的准备工作略微繁琐点,后面的操作都很方便。

而且在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汇总到一个数据库文件中2NSManagedObjectModel *model =[NSManagedObjectModel mergedModelFromBundles:nil];34//调度者的实例化,需要Model5NSPersistentStoreCoordinator *store =[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];67//数据库是一个文件,持久化连接的文件8NSError *error =nil;9NSURL *url = [@"my.db"appendDocumentDirURL];1011//添加持久化存储的数据库12[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];1314if(error ==nil) {15NSLog(@"数据库建立成功");1617//获取到数据库操作的上下文,类似于SQLite的句柄18_sharedContext =[[NSManagedObjectContext alloc] init];1920//让上下文记录住存储调度21_sharedContext.persistentStoreCoordinator =store;22}else{23NSLog(@"数据库建立失败");24}

2.4.添加,更新,删除添加:

1.新建实体 INST (插入)

1Person *p = [[Person alloc] init]

2.设置实体的属性

1//设置对象内容2person.name =_nameText.text;3person.phoneNo =_phoneText.text;4person.QQ=_qqText.text;5person.weibo = _weiboText.text;

3.保存上下文

1//实体描述2[NSEntityDescription insertNewObjectForEntityForName:@"Person"inManagedObjectContext:context]34//获取上下文5NSManagedObjectContext *context =[[DataManager sharedDataManager] sharedContext];67//让上下文保存8if([context save:nil]) {9NSLog(@"保存成功");1011//返回上级视图控制器12[self.navigationController popViewControllerAnimated:YES];13}else{14NSLog(@"保存失败!");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//让上下文保存2if([context save:nil]) {3NSLog(@"保存成功");45//返回上级视图控制器6[self.navigationController popViewControllerAnimated:YES];7}else{8NSLog(@"保存失败!");9}

删除

//1. 首先找到要删除哪条记录Person *person =

1//2. 删除2NSManagedObjectContext *context =[[DataManager sharedDataManager] sharedContext];34//让上下文删除5[context deleteObject:person];67//上下文保存8if([context save:nil]) {9NSLog(@"删除成功!");10}else{11NSLog(@"删除失败!");12}

2.4.查询三.查询1.使用NSFetchedResultsController控制器

//查询结果控制器NSFetchedResultsController *_fetchedResultsController;

2.监控managed object context对象的改变,报告给delegate

1//设置代理2_fetchedResultsController.delegate= self;

2.1当操作数据上下文的内容改变的时候,会自动调用抓取结果控制器的代理方法

1#PRagmamark 查询结果控制器代理方法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和索引信息。

1NSFetchRequest *reqest = _fetchedResultsController.fetchRequest;

11>查询请求22>数据库上下文33>表格中用于分组的字段名44>缓存名称5*/6_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

5.注意:一定要执行抓取请求,返回的数据在sections里,这个数组中装的都是遵守NSFetchedResultsSectionInfo这个协议的对象。通过numberOfObjects就能获取一组有多少数据对象了。

1return[_fetchedResultsController.sections[0] numberOfObjects];

清澈Saup

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航