CoreData的简单使用
来源:互联网 发布:月薪12000的北京程序员 编辑:程序博客网 时间:2024/05/04 15:37
1.使用Core Data 的优点:(摘自:点击打开链接)
Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互。Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需任何SQL知识就能操作他们。
Core Data位于MVC设计模式中的模型层,一般需要在设备上存储结构化数据时,考虑使用SQLite或是序列化等方法,而Core Data是这两种方法的混合体,并增加了一些功能,提供了SQL强大威力,但是用起来又和序列化一样简单。Core Data能将应用程序中的对象直接保存到数据库中,无需进行复杂的查询,也无需确保对象的属性名和数据库字段名对应,这一切都由Core Data完成。
Core Data的核心——托管对象
托管对象是要存储到数据库中的对象的一种表示,可以看成是SQL记录,它通常包含一些字段,这些字段与应用程序中要存储的对象的属性进行匹配,创建托管对象后,必须将气托管到托管对象上下文中,然后才可以存储到数据库中。
托管对象上下文:
托管对象上下文包含所有的托管对象,这些托管对象已经为提交给数据库准备就绪,在托管对象上下文中,可以添加、修改和删除托管对象,这一层相当于应用程序和数据库之间的缓冲区。
托管对象表:
托管对象表描述了数据库的架构(schema),供托管对象上下文与数据库交互时使用。托管对象表包含一些列实体描述,每个实体都描述了一个数据库表,用于将托管对象映射到数据库条目。
2.具体使用如下:
1.新建CoreDataDemo项目。
2.新建DataModel
选择Core Data temple ,选择 Data Model->Next->Create.
添加Attributes
3.新建 NSManagedObject subclass.
选择Core Data temple ,选择NSManagedObject subclass ->Next。
4.配置
#pragma mark- NSManagedObjectContext Handle- (NSManagedObjectContext *)managedObjectContext{ if (_objectContext != nil) { return _objectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { _objectContext = [[NSManagedObjectContext alloc] init]; [_objectContext setPersistentStoreCoordinator:coordinator]; } return _objectContext;}- (NSManagedObjectModel *)managedObjectModel{ if (_objectModel != nil) { return _objectModel; } //从本地所有xcdatamodel文件中获得这个CoreData的数据模板 _objectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; return _objectModel;}- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{ if (_coordinator != nil) { return _coordinator; } NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"RandomEvent.sqlite"]]; //数据库名为RandomEvent.sqlite NSError *error; _coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; // handle db upgrade NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; //使用sqlite 类型 if (![_coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { NSAssert(0, @"persistentStoreCoordinator init failed!"); } return _coordinator;}- (NSString *)applicationDocumentsDirectory{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; NSLog(@"basePath:%@",basePath); return basePath;}
5.数据操作。
1.add:
-(IBAction) add:(id)sender{ RandomEvent *event = [NSEntityDescription insertNewObjectForEntityForName:@"RandomEvent" inManagedObjectContext:_objectContext]; event.randomNumber = [NSNumber numberWithFloat:arc4random()%100]; event.createDate = [NSDate date]; [self saveContext]; [self refreshEventList]; NSIndexPath *indexPath = [NSIndexPath indexPathForRow:(_dataSource.count -1) inSection:0]; [self.eventTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; }
2.更新数据
#pragma mark- Data-(BOOL)saveContext{ NSError *error = nil; if (![_objectContext save:&error]) { //handle error. NSLog(@"error:%@",error.localizedDescription); return NO; } return YES;}-(void)fetchEvents{ NSEntityDescription *entityDesctiption = [NSEntityDescription entityForName:@"RandomEvent" inManagedObjectContext:_objectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:entityDesctiption]; //根据字段对数据进行排序 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:YES]; [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; NSError *error = nil; if (_dataSource.count > 0) { [_dataSource removeAllObjects]; } [_dataSource addObjectsFromArray: [_objectContext executeFetchRequest:fetchRequest error:&error]]; if (nil == _dataSource) { NSLog(@"Error: %@", [error localizedDescription]); }}
6.填充数据,刷新UI
#pragma mark - UITableViewDataSource-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return _dataSource.count; }- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellID = @"RandomEventCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; if (cell == nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID]; } RandomEvent *randomEvent = [_dataSource objectAtIndex:indexPath.row]; cell.textLabel.text = [NSString stringWithFormat:@"%d",[randomEvent.randomNumber intValue]]; NSDate *date = randomEvent.createDate; NSString *time = [self dateTimeWithDate:date]; cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",time]; return cell;}-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ NSUInteger row = indexPath.row; if (row < [_dataSource count]) { [_objectContext deleteObject:[_dataSource objectAtIndex:row]]; [self saveContext]; [self refreshEventList]; }}
#pragma mark- UI-(void)refreshEventList{ [self fetchEvents]; [self.eventTableView reloadData];}
主要代码如上。
Demo 地址: CoreDataDemo
详细使用地址
CoreData详细使用上中下篇
- CoreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- coreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- CoreData的简单使用
- CoreData简单地的使用
- 使用CoreData数据库框架的简单方式
- iOS开发-CoreData的简单使用
- iOS开发-CoreData的简单使用
- iOS开发:coredata的简单使用
- 20160811关于CoreData的简单使用
- CoreData简单使用
- CoreData 简单使用事例
- cocos2d-x 之 CCCallFunc、CCCallFuncN 、CCCallFuncND区别
- UML时序图
- 更新语句,批量更新语句
- 操作系统与CPU的指令集的关系是怎样的?
- jsp jquery实现级联菜单,jquery对select元素的简单操作
- CoreData的简单使用
- 请问spfa+stack 和spfa+queue 是什么原理
- 一步步学习SPD2010--第十二章节--理解可用性和可接入性(1)--应用以用户为中心的方法论
- VS2010. ASP.NET树控件不显示图解决方法。
- Android 中关于 【Cursor】 类的介绍
- 远程用户连接mysql授权
- Cocos2d-x简单Box2d代码示例|点击碰撞>HelloWorldScene.h<代码演示>
- Ubuntu 12.04 配置apue2环境(《unix环境高级编程》源码编译环境安装)
- 实现页面弹出框