在上一篇中简单介绍了Core Data Stack,自上而下地对Core Data应用结构有个基本的认识,不过都是理论上的。这里就以上一篇的理论构建起一个可运行的Demo,执行一些简单的增删改查操作。
(图片来自Apple)
首先,我们需要建立如上图的栈结构。因此,在ViewController里添加3个属性:
- @interface ViewController : UIViewController
- @property (nonatomic, retain) NSManagedObjectModel *managedObjectModel;
- @property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
- @property (nonatomic, retain) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- @end
根据前文讨论的顺序,我们首先创建managedObjectModel(在那之前需要引入CoreData Framework):
- - (NSManagedObjectModel *)managedObjectModel
- {
- if (nil != _managedObjectModel) {
- return _managedObjectModel;
- }
- _managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
- return _managedObjectModel;
- }
接着创建NSManagedObject的生存环境 —— NSManagedObjectContext:
- - (NSManagedObjectContext *)managedObjectContext
- {
- if (nil != _managedObjectContext) {
- return _managedObjectContext;
- }
- _managedObjectContext = [[NSManagedObjectContext alloc] init];
- return _managedObjectContext;
- }
由于Demo会将数据存储到本地文件,所以还需要NSPersistentStoreCoordinator和NSManagedObjectContext配合。
下面是创建Core Data栈结构的完整代码:
- #pragma mark -
- #pragma mark - Core Data Stack
- - (NSManagedObjectModel *)managedObjectModel
- {
- if (nil != _managedObjectModel) {
- return _managedObjectModel;
- }
- _managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
- return _managedObjectModel;
- }
- - (NSManagedObjectContext *)managedObjectContext
- {
- if (nil != _managedObjectContext) {
- return _managedObjectContext;
- }
- _managedObjectContext = [[NSManagedObjectContext alloc] init];
- if (self.persistentStoreCoordinator) {
- [_managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
- }
- return _managedObjectContext;
- }
- - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
- {
- if (nil != _persistentStoreCoordinator) {
- return _persistentStoreCoordinator;
- }
- NSString *storeType = NSSQLiteStoreType;
- NSString *storeName = @"cdNBA.sqlite";
- NSError *error = NULL;
- NSURL *storeURL = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:storeName]];
- _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
- if (![_persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:nilURL:storeURL options:nil error:&error]) {
- NSLog(@"Error : %@\n", [error localizedDescription]);
- NSAssert1(YES, @"Failed to create store %@ with NSSQLiteStoreType", [storeURL path]);
- }
- return _persistentStoreCoordinator;
- }
- #pragma mark -
- #pragma mark Application's Documents Directory
- - (NSString *)applicationDocumentsDirectory
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
- return basePath;
- }
在搭建完基础的Core Data栈结构后,就可以写一些简单的CURD代码了:
- #pragma mark -
- #pragma mark - CURD Operations
- - (BOOL)createTeamWithName:(NSString *)teamName city:(NSString *)teamCity
- {
- if (!teamName || !teamCity) {
- return NO;
- }
- NSManagedObject *teamObject = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:self.managedObjectContext];
- [teamObject setValue:teamName forKey:@"name"];
- [teamObject setValue:teamCity forKey:@"city"];
- return YES;
- }
- - (NSArray *)fetchTeamList
- {
- NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
- [fetchRequest setEntity:[NSEntityDescription entityForName:@"Team" inManagedObjectContext:self.managedObjectContext]];
- NSError *error = NULL;
- NSArray *array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
- if (error) {
- NSLog(@"Error : %@\n", [error localizedDescription]);
- }
- [fetchRequest release], fetchRequest = nil;
- return array;
- }
我们可以把读写的代码放到viewDidLoad函数中:
- - (void)viewDidLoad
- {
- [superviewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- [self createTeamWithName:@"Heat"city:@"Miami"];
- [self createTeamWithName:@"Lakers"city:@"LA"];
- [self saveContext];
- NSArray *teamArray = [self fetchTeamList];
- if (teamArray) {
- for (NSManagedObject *teamObject in teamArray) {
- NSString *teamName = [teamObject valueForKey:@"name"];
- NSString *teamCity = [teamObject valueForKey:@"city"];
- NSLog(@"Team info : %@, %@\n", teamName, teamCity);
- }
- }
- }
由于在context中创建的对象只是存在于内存中,所以我们还需要显式地把数据保存到sqlite文件里:
- #pragma mark -
- #pragma mark - Save Context
- - (void)saveContext
- {
- NSError *error = NULL;
- NSManagedObjectContext *moc = self.managedObjectContext;
- if (moc && [moc hasChanges] && ![moc save:&error]) {
- NSLog(@"Error %@, %@", error, [error localizedDescription]);
- abort();
- }
- }
最后,就是跑一下Demo,检验一下结果。
执行过一次程序后,我们可以搜索下cdNBA.sqlite文件,然后查看里面的数据:
同时,控制台也输出了数据:
- 2013-01-16 14:32:52.638 cdNBA[4717:c07] Team info : Heat, Miami
- 2013-01-16 14:32:52.639 cdNBA[4717:c07] Team info : Lakers, LA
相关推荐
### Core Data: 更新至 Swift 3 #### 一、引言与Swift的融合 本书旨在为读者提供关于如何最大限度地利用Core Data框架的同时避免潜在陷阱的清晰指导。本书假设读者已经熟悉Swift语言及其iOS开发环境,但对于无论是...
Core Data is intricate, powerful, and necessary. Discover the powerful capabilities integrated into Core Data, and how to use Core Data in your iOS and OS X projects. All examples are current for OS X...
《Core Data by Tutorials v4.0 (Swift 4)》是针对苹果开发平台的一款深入讲解Core Data技术的教程,特别适用于使用Swift 4编程语言的开发者。Core Data是Apple提供的一项强大的数据管理框架,它简化了应用程序的...
"Data Analytics with Hadoop: An Introduction for Data Scientists" ISBN: 1491913703 | 2016 | PDF | 288 pages | 7 MB Ready to use statistical and machine-learning techniques across large data sets? ...
《Core Data by Tutorials v4.0》是关于苹果开发框架Core Data的一份详细教程,主要针对Swift 4编程语言。Core Data是苹果提供的一种数据管理框架,它为iOS、macOS、watchOS和tvOS应用程序提供了模型层的抽象和管理...
第二章“Understanding Core Data”深入讲解了Core Data的基本概念和架构,为接下来的内容打下基础。第三章“Storing Data: SQLite and Other Options”探讨了数据存储的多种方式,特别是SQLite的使用,也涵盖了其他...
#### 二、ABAP Core Data Services概述 **ABAP Core Data Services (CDS)** 是一种基于ABAP平台的现代数据定义语言,它允许开发者以声明式的方式定义数据模型。CDS提供了一套强大的工具和技术,用于创建和维护复杂...
5. **性能优化技巧**:提供了一系列提高Core Data性能的方法,包括缓存策略、批量操作等。 6. **高级主题**:包括错误处理、版本控制、实时同步等高级特性。 7. **实战案例分析**:通过具体的项目案例来展示如何在...
《iOS Core Data高级编程 第二版》是针对iOS开发者在数据持久化领域的一本专业书籍,专门讲解了如何高效使用Core Data框架。这本书涵盖了Core Data的基础知识、高级概念以及实用技巧,适合有一定iOS开发经验,并希望...
本书《Core.Data.Updated.for.Swift.3》是关于学习使用Swift 3进行Core Data开发的指导书。Core Data是苹果公司提供的一个框架,用于管理应用程序数据模型对象的生命周期,它简化了数据持久化过程。在本书的介绍中,...
总之,《Core Data》这本书全面覆盖了从基础到高级的Core Data使用技巧,适合不同层次的iOS开发者阅读,无论你是初学者还是经验丰富的专业人士,都能从中获益匪浅。通过系统的学习和实践,你将能够更好地利用Core ...
### Core Data - Florian Kugler Daniel Eggert #### 一、引言与Swift语言的注意事项 本书由Florian Kugler和Daniel Eggert撰写,旨在为开发者提供一份详尽的Core Data指南。作为iOS开发中不可或缺的一部分,Core ...
《Core Data by Tutorials》是一本专注于教授iOS开发者如何使用苹果公司的Core Data框架的教程书籍,它详尽地介绍了从基础到高级的Core Data技能。这本书特别为iOS 8和Xcode环境编写,提供了系统性地从零开始构建...
在OS X和iOS应用中,Core Data通常用于存储应用程序的数据,而这些数据可以是SQLite数据库、XML档案或二进制档案。 在XML归档方面,Core Data提供了将对象图转换为XML格式的能力,这在数据交换、备份或者跨平台传输...
1. 《Core Data 第二版》是一本专注于iOS数据编程的书籍,由Marcus S. Zarra编写,属于The Pragmatic Bookshelf出版社,地址位于达拉斯和北卡罗来纳州的罗利。 2. 本书是关于iOS、OSX及iCloud数据存储与管理的讨论,...
### Core Data iOS Essentials #### 一、概述 《Core Data iOS Essentials》是一本关于iOS应用程序开发的专业书籍,主要聚焦于如何使用Core Data框架来管理数据。本书由B. M. Harwani撰写,并由Packt Publishing...
总之,《Core Data by Tutorials v6》教程是iOS开发者深入学习Core Data的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中获益匪浅。通过这本书,你可以掌握从数据模型设计到实际应用开发的完整流程,提升...
4. **Core Data堆栈(The Core Data Stack)**:Core Data堆栈是指一系列协同工作的对象,它们共同完成了数据的存储和检索。这包括托管对象模型(Managed Object Model)、持久化存储(Persistent Store)和持久化...