——杂言:最近开始学习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. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  2. Please install Android target

    今天在执行ionic build android时出现以下错误: [Error: Please install Android target: "android-22". Hint ...

  3. PAT 天梯赛 L2-012. 关于堆的判断 【Heap】【STL】

    题目链接 https://www.patest.cn/contests/gplt/L2-012 思路 使用 STL 里面有关 Heap 的函数 std::make_heap将[start, end)范 ...

  4. P3320 [SDOI2015]寻宝游戏

    题目 P3320 [SDOI2015]寻宝游戏 做法 很巧妙的一种思路,懂了之后觉得大水题 首先要知道:在一棵树上标记一些点,然后从任意一点出发,遍历所有的的最小路径为\(dfs\)序从小到大遍历 那 ...

  5. sublime text的pylinter插件设置pylint_rc后提示错误

    sublime text插件pylinter提示错误 Warning: option include-ids is deprecated and ignored. 错误本身是Python的错误,这说明 ...

  6. Docker dockerfile命令详解

    docker-file 官网文档:https://docs.docker.com/v17.09/engine/reference/builder/ 制作Dockerfile为Docker入门学习的第一 ...

  7. sqoop job 增量导入

    使用sqoop job做增量导入 在执行导入模式为 incremental 的sqoop job 时,sqoop会获取上次导入操作的 –check-column的value值,也就是说使用sqoop ...

  8. 大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例

    1. 职责链模式: 使多个对象都有机会处理请求,从而避免请求发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它. 当客户提交一个请求时,请求是沿着链传递直 ...

  9. MVC5中EF6 Code First启动慢及间隙变慢的一些优化处理

    问题描述: 第一次访问的时候很慢,后面再次打开页面很快,过了一段时间不访问页面然后再次打开页面又像第一次那样很慢. 采用的技术和环境: 使用技术:EF6+MVC5 服务器环境:Windows 2012 ...

  10. PS色调— —通道混合

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...