——杂言:最近开始学习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学习)的更多相关文章

  1. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  2. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

  3. iOS学习路线图

    一.iOS学习路线图   二.iOS学习路线图--视频篇       阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天       学习后目标:    ...

  4. iOS学习资料整理

    视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS S ...

  5. iOS 学习

    iOS 学习资料 (适合初学者) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解 ...

  6. iOS 学习资料汇总

    (适合初学者入门) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS ...

  7. 2015最新iOS学习线路图

    iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...

  8. ios 学习路线总结

    学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...

  9. IOS学习经验总结

    学习ios有一段时间了,感觉有些盲目.有些迷茫,从网上收集了一些比人的学习经验,来参考. IOS学习经验总结--来自知乎网友 转自知乎:http://www.zhihu.com/question/20 ...

  10. iOS学习笔记17-FMDB

    上一节我已经介绍了SQLite的简单使用,不了解的可以提前去看一下iOS学习笔记16-数据库SQLite,这节我们来讲下FMDB. 一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQL ...

随机推荐

  1. 图片加载控件glide

    基本用法 //(1)加载网络图片 tvGlide1.setText("(1)加载网络图片"); Glide.with(this).load("http://img1.im ...

  2. 深入浅出聊聊企业级API网关

    http://architect.dataguru.cn/article-11431-1.html API Gateway(API GW / API 网关),顾名思义,是出现在系统边界上的一个面向 A ...

  3. jps参数

    jps是jdk1.5提供的用来显示当前java进程的指令,能显示进程id及进程名称(多指jar包名称.class名称) -q 只显示进程ID -m 显示传递给main方法的参数 -l 显示应用程序完整 ...

  4. Linux电源管理(5)_Hibernate和Sleep功能介绍【转】

    本文转载自:http://www.wowotech.net/pm_subsystem/std_str_func.html 1. 前言 Hibernate和Sleep两个功能是Linux Generic ...

  5. BEM —— 源自Yandex的CSS 命名方法论

    原文链接: https://segmentfault.com/a/1190000000391762 人们问我最多的问题之一是在CSS类名中--和__是什么意思?它们的出现是源于BEM和Nicolas ...

  6. Linux- 关于windows和Linux和Mac的换行符

    windows 的换行符为"\r\n" Linux的换行符为"\n" Mac的换行符为"\n\r",和Windows相反

  7. C++写和读文件

    1.写: /*C++写文件和读文件*/ #include <stdio.h> #include <stdlib.h> int main() { FILE * fp; fp = ...

  8. BZOJ 2527 [Poi2011]Meteors:整体二分

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...

  9. JAVA发送手机短信

    <p><span>JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 ...

  10. jq js 的date()使用

    Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年 ...