CoreData的使用(IOS学习)
——杂言:最近开始学习IOS7的开发,下文是在已经建好的项目里加入CoreData的结构,并实现一个基于coredata的简单save,query。
1. 引入Core Data Framework。选中项目-->Genaral-->Linked Frameworks and Libraries中添加“CoreData.Framework”。然后在prefix.pch中加入“#import<CoreData/CoreData.h>”
2. 加入数据模型,创建Model.xcdatamodeld文件。File-->New-->File-->IOS-->Core Data-->Data Model
3. 在Delegate中建立CoreData与Delegate的关联。点击XYZAppDelegate.h,在@interface与@end之中加入以下代码
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; - (void) saveContext;
- (NSURL *) applicationDocumentsDirectory;
4. 之后在XYZAppDelegate.m的@implementation下面写入以下代码(注:标红的2处名字请与.xcdatamodeld文件名保持一致)
@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]);
}
}
}
- (NSManagedObjectContext *) managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if(coordinator != nil){
NSLog(@"coordinator is not null-----");
_managedObjectContext = [[NSManagedObjectContext alloc]init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}else{
NSLog(@"coordinator is null-----");
}
return _managedObjectContext;
}
- (NSManagedObjectModel *) managedObjectModel
{
if(_managedObjectModel != nil){
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Ratings" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *) persistentStoreCoordinator
{
if(_persistentStoreCoordinator != nil){
return _persistentStoreCoordinator;
}
NSURL *storeUrl = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Ratings.sqlite"];
NSError *error = nil;
NSLog(@"storeUrl: %@",[self applicationDocumentsDirectory]);
_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;
}
- (NSURL *) applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}
5. 至此,Core Data的准备工作已经完毕。
6. 现在可以创建Entity并结合使用,打开Ratings.xcdatamodeld文件,面板如下(2种模式),可以点击并添加Entity(可以结合右侧属性面板使用)
7. 为entity添加.m和.h文件,File-->New->File->IOS->Core Data->NSManagedObject subclass
8. entity已经创建完成,可以开始在Controller中使用相关context操作。我的是XYZPlayersViewController。
9. XYZPlayersViewController.h中添加以下代码
@property (nonatomic, strong) NSManagedObjectContext *context;
10. XYZPlayersViewController.m中需要使用的地方添加以下代码
@synthesize context;
XYZAppDelegate *delegate = (XYZAppDelegate *)[[UIApplication sharedApplication]delegate];
self.context = delegate.managedObjectContext; Player *player = [NSEntityDescription insertNewObjectForEntityForName:@"Player"
inManagedObjectContext:context];
player.name = @"timelyxyz";
player.game = @"Chess";
player.rating = [NSNumber numberWithInt:]; NSError *error = nil;
if(![context save:&error]){
NSLog(@"%@", [error localizedDescription]);
} NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Player"
inManagedObjectContext:context];
[fetchRequest setEntity:entity]; NSArray *fetchObjects = [context executeFetchRequest:fetchRequest error:&error];
for(NSManagedObject *info in fetchObjects){
NSLog(@"name: %@",[info valueForKey:@"name"]);
NSLog(@"game: %@", [info valueForKey:@"game"]);
NSLog(@"rating: %@", [info valueForKey:@"rating"]);
}
11. log输出如下
demo下载:Ratings
CoreData的使用(IOS学习)的更多相关文章
- 【原】iOS学习之SQLite和CoreData数据库的比较
1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
- iOS学习路线图
一.iOS学习路线图 二.iOS学习路线图--视频篇 阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天 学习后目标: ...
- iOS学习资料整理
视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS S ...
- iOS 学习
iOS 学习资料 (适合初学者) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解 ...
- iOS 学习资料汇总
(适合初学者入门) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS ...
- 2015最新iOS学习线路图
iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...
- ios 学习路线总结
学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...
- IOS学习经验总结
学习ios有一段时间了,感觉有些盲目.有些迷茫,从网上收集了一些比人的学习经验,来参考. IOS学习经验总结--来自知乎网友 转自知乎:http://www.zhihu.com/question/20 ...
- iOS学习笔记17-FMDB
上一节我已经介绍了SQLite的简单使用,不了解的可以提前去看一下iOS学习笔记16-数据库SQLite,这节我们来讲下FMDB. 一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQL ...
随机推荐
- python基础16 ----面向对象程序设计二
一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...
- windows中检查端口占用
在cmd中怎么输入netstat -aon|findstr "9080" 返回: UDP 0.0.0.0:8001 *.* 其中的4220为进城PID
- Gem简介
Rubyems:简称gems是一个用于对rails组建近些年个打包的ruby打包系统,它提供了一个分发ruby程序喝库的标准格式,还提供了一个管理程序包的工具.Rubyems的功能类似于linux下的 ...
- Ubuntu安装SSH + Windows上配置Putty
1. Ubuntu安装SSH 命令: # sudo apt-get install openssh-server 2. 启动SSH Server 命令: # sudo /etc/init.d/ssh ...
- gulp 打包报错:ReferenceError: internalBinding is not defined
> gulp build internal/util/inspect.js:31 const types = internalBinding('types'); ^ ReferenceError ...
- UI组件之Button
UIButton:按钮,可以实现用户和app的交互,父类是UIControl,事件驱动型的组件的父类都是UIControl.一般使用类方法创建一个对象,创建时指定button的类型, iOS7.0后采 ...
- 跨平台(I版到K版)迁移实践总结
所谓跨平台迁移,对于了解openstack冷迁移过程的同学来说,其实就是手动去执行冷迁移的代码行为,当然像我这种抵制体力劳动的人,肯定会想写脚本去跑,即使不会也要边学边用. 迁移并非想象 ...
- 导出数据到表格PHP
导出数据到表格 public function excel(){ $filename = '导出表格'; $header = ['编号','名称']; $index = ['id','name']; ...
- mini2440移植uboot 2014.04(二)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...
- java深入探究07-jdbc下
1.BeanUtils组件 1)使用:导入commons-beanutils-1.8.3.jar核心包,日志支持包: commons-logging-1.1.3.jar 缺少日志的jar文件报错:ja ...