iOS开发学习之Core Data

1.添加DataModel文件

2.添加实体和属性

3.创建NSManagedObject的子类,这里命名为Location(若没有实体属性类型是Transformable或没有额外的方法,只需要存储基本类型的话,可略过)

  注意:这里可以做一个额外的工作,在Location+CoreDataProperties.h文件中,将实体属性类型是Transformable对应的@property属性的类型从id改为需要的类型

4.在AppDelegate.m文件添加以下代码:

@interface AppDelegate ()

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;

@property (nonatomic,strong) NSManagedObjectModel *managedObjectModel;

@property (nonatomic,strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@end

5.在AppDelegate.m文件的@implementation底部添加以下代码:

#pragma mark - Core Data

-(NSManagedObjectModel *)managedObjectModel

{

if(_managedObjectModel == nil)

{

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];

NSURL *modelURL = [NSURL fileURLWithPath:modelPath];

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

}

return _managedObjectModel;

}

-(NSString *)documentsDirectory

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths lastObject];

//NSLog(@"%@",documentsDirectory);

return documentsDirectory;

}

-(NSString *)dataStorePath

{

return [[self documentsDirectory] stringByAppendingPathComponent:@"DataStore.sqlite"];

}

-(NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

if(_persistentStoreCoordinator == nil)

{

NSURL *storeURL = [NSURL fileURLWithPath:[self dataStorePath]];

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

NSError *error;

if(![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])

{

NSLog(@"Error adding persistent store %@,%@",error,[error userInfo]);

abort();

}

}

return _persistentStoreCoordinator;

}

-(NSManagedObjectContext *)managedObjectContext

{

if(_managedObjectContext == nil)

{

NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;

if(coordinator != nil)

{

_managedObjectContext = [[NSManagedObjectContext alloc] init];

[_managedObjectContext setPersistentStoreCoordinator:coordinator];

}

}

return _managedObjectContext;

}

6.在需要应用Core Data进行数据操控的视图控制器的.h头文件中添加以下代码:

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;

7.在AppDelegate.m文件中分别#import以上视图控制器的.h文件,并将AppDelegate创建的managedObjectContext的指针传递给以上控制器

如:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

CurrentLocationViewController *currentLocationViewController = (CurrentLocationViewController *)tabBarController.viewControllers[0];

currentLocationViewController.managedObjectContext = self.managedObjectContext;//传递指针

UINavigationController *navigationController = (UINavigationController *)tabBarController.viewControllers[1];

LocationsViewController *locationsViewController = (LocationsViewController *)navigationController.viewControllers[0];

locationsViewController.managedObjectContext = self.managedObjectContext;//传递指针

MapViewController *mapViewController = (MapViewController *)tabBarController.viewControllers[2];

mapViewController.managedObjectContext = self.managedObjectContext;//传递指针

return YES;

}

当以上视图控制器切换到其他需要应用Core Data操控数据的视图控制器时,可通过prepareForSegue将managedObjectContext的指针传递过去

如:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

if([segue.identifier isEqualToString:@"TagLocation"])

{

UINavigationController *navigationController = segue.destinationViewController;

LocationDetailsViewController *controller = (LocationDetailsViewController *)navigationController.topViewController;

controller.coordinate = _location.coordinate;

controller.placemark = _placemark;

controller.managedObjectContext = self.managedObjectContext;//传递指针

}

}

(1)添加数据

(2)修改数据

(3)删除数据

(4)查找数据:  

  

时间: 2024-10-18 07:48:36

iOS开发学习之Core Data的相关文章

iOS Swift学习笔记 Core Data (一)Hello Core Data

正在学习swift的Core Data,做个笔记,顺便分享源码 这个实例是一个很简单的Table,通过右上角的Add按钮可以添加新的用户名.数据存储在CoreData中,这样,才不会丢失. 通过这个例子可以学会: 使用Xcode的model编辑器创建数据对象的model data. 添加新的记录到CoreData中 从CoreData中获取记录集合 显示记录到table view中 这个例子十分简单,还有很多可以改进的地方,比如,每次要操作managed class都需要访问AppDelegat

iOS开发过程中使用Core Data应避免的十个错误

原文出处: informit   译文出处:cocoachina Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据.对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了.很多开发者常常在这方面犯一些错误,而这篇文章列出了开发者在iOS开发过程中使用Core Data常见的一些错误,并对如何避免这些错误进行了分析.  1.不了解关键术语 对于iOS开发者来说,会使用Core Data是一项必备技能.

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

IOS 数据存储之 Core Data详解

Core Date是ios3.0后引入的数据持久化解决方案,它是是苹果官方推荐使用的,不需要借助第三方框架.Core Date实际上是对SQLite的封装,提供了更高级的持久化方式.在对数据库操作时,不需要使用sql语句,也就意味着即使不懂sql语句,也可以操作数据库中的数据. 在各类应用开发中使用数据库操作时通常都会用到 (ORM) "对象关系映射",Core Data就是这样的一种模式.ORM是将关系数据库中的表,转化为程序中的对象,但实际上是对数据中的数据进行操作. 在使用Cor

ios开发学习资料总汇

ios开发学习资料总汇 下面是收集的一些学习资料. 1.唐巧精心整理了国内40多位iOS开发博主的博客地址列表 2.ios常见加密: 链接: http://pan.baidu.com/s/1eQTGFIE 密码: p8ay 3.

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

11个超棒的iOS开发学习网站

11个超棒的iOS开发学习网站 原文:11 Insanely Great iOS Developers Sites永不止步地向他人学习 我相信,要想从一个"还不错"的人变成一个卓越的人,我们需要不停地向他人学习,同时还得尽早地适应最新的技术和工具.除了苹果官方文档网站之外,我列举了一些能获取有价值的文章和资源的网站,这些网站能够帮助我们更上一个台阶. 让我们先看一些原创内容博客: objc.io 这个网站由世界级的iOS工程师每月进行更新.上面可以看到关于某些话题的高质量文章和深度评论

IOS开发学习笔记-(3) 进度条、等待动画开始停止

一.创建对应空间视图  ,如下图: 二.编写对应的 .h 代码,如下 : #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activWaitNetWork; @property (weak, nonatomic) IBOutlet UIProgressView *pgrsDownLo