`
dcj3sjt126com
  • 浏览: 1881520 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Core Data浅谈系列之二 : 简单的CURD

    博客分类:
  • IOS
阅读更多
上一篇中简单介绍了Core Data Stack,自上而下地对Core Data应用结构有个基本的认识,不过都是理论上的。这里就以上一篇的理论构建起一个可运行的Demo,执行一些简单的增删改查操作。
 
(图片来自Apple)
 
 
首先,我们需要建立如上图的栈结构。因此,在ViewController里添加3个属性:
  1. @interface ViewController : UIViewController  
  2.   
  3. @property (nonatomic, retain) NSManagedObjectModel *managedObjectModel;  
  4. @property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;  
  5. @property (nonatomic, retain) NSPersistentStoreCoordinator *persistentStoreCoordinator;  
  6.   
  7. @end  

根据前文讨论的顺序,我们首先创建managedObjectModel(在那之前需要引入CoreData Framework):

  1. - (NSManagedObjectModel *)managedObjectModel  
  2. {  
  3.     if (nil != _managedObjectModel) {  
  4.         return _managedObjectModel;  
  5.     }  
  6.       
  7.     _managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
  8.     return _managedObjectModel;  
  9. }  
接着创建NSManagedObject的生存环境 —— NSManagedObjectContext:
  1. - (NSManagedObjectContext *)managedObjectContext  
  2. {  
  3.     if (nil != _managedObjectContext) {  
  4.         return _managedObjectContext;  
  5.     }  
  6.       
  7.     _managedObjectContext = [[NSManagedObjectContext alloc] init];  
  8.     return _managedObjectContext;  
  9. }  
由于Demo会将数据存储到本地文件,所以还需要NSPersistentStoreCoordinator和NSManagedObjectContext配合。
下面是创建Core Data栈结构的完整代码:
  1. #pragma mark -   
  2. #pragma mark - Core Data Stack  
  3.   
  4. - (NSManagedObjectModel *)managedObjectModel  
  5. {  
  6.     if (nil != _managedObjectModel) {  
  7.         return _managedObjectModel;  
  8.     }  
  9.       
  10.     _managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
  11.     return _managedObjectModel;  
  12. }  
  13.   
  14. - (NSManagedObjectContext *)managedObjectContext  
  15. {  
  16.     if (nil != _managedObjectContext) {  
  17.         return _managedObjectContext;  
  18.     }  
  19.       
  20.     _managedObjectContext = [[NSManagedObjectContext alloc] init];  
  21.       
  22.     if (self.persistentStoreCoordinator) {  
  23.         [_managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];  
  24.     }  
  25.       
  26.     return _managedObjectContext;  
  27. }  
  28.   
  29. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator  
  30. {  
  31.     if (nil != _persistentStoreCoordinator) {  
  32.         return _persistentStoreCoordinator;  
  33.     }  
  34.       
  35.     NSString *storeType = NSSQLiteStoreType;  
  36.     NSString *storeName = @"cdNBA.sqlite";  
  37.       
  38.     NSError *error = NULL;  
  39.     NSURL *storeURL = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:storeName]];  
  40.       
  41.     _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];  
  42.     if (![_persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:nilURL:storeURL options:nil error:&error]) {  
  43.         NSLog(@"Error : %@\n", [error localizedDescription]);  
  44.         NSAssert1(YES, @"Failed to create store %@ with NSSQLiteStoreType", [storeURL path]);  
  45.     }  
  46.       
  47.     return _persistentStoreCoordinator;  
  48. }  
  49.   
  50. #pragma mark -  
  51. #pragma mark Application's Documents Directory  
  52.   
  53. - (NSString *)applicationDocumentsDirectory  
  54. {  
  55.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  56.     NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;  
  57.     return basePath;  
  58. }  

在搭建完基础的Core Data栈结构后,就可以写一些简单的CURD代码了:

  1. #pragma mark -   
  2. #pragma mark - CURD Operations  
  3.   
  4. - (BOOL)createTeamWithName:(NSString *)teamName city:(NSString *)teamCity  
  5. {  
  6.     if (!teamName || !teamCity) {  
  7.         return NO;  
  8.     }  
  9.       
  10.     NSManagedObject *teamObject = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:self.managedObjectContext];  
  11.     [teamObject setValue:teamName forKey:@"name"];  
  12.     [teamObject setValue:teamCity forKey:@"city"];  
  13.       
  14.     return YES;  
  15. }  
  16.   
  17. - (NSArray *)fetchTeamList  
  18. {  
  19.     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];  
  20.     [fetchRequest setEntity:[NSEntityDescription entityForName:@"Team" inManagedObjectContext:self.managedObjectContext]];  
  21.       
  22.     NSError *error = NULL;  
  23.     NSArray *array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];  
  24.     if (error) {  
  25.         NSLog(@"Error : %@\n", [error localizedDescription]);  
  26.     }  
  27.       
  28.     [fetchRequest release], fetchRequest = nil;  
  29.       
  30.     return array;  
  31. }  

我们可以把读写的代码放到viewDidLoad函数中:

  1. - (void)viewDidLoad  
  2. {  
  3.     [superviewDidLoad];  
  4. // Do any additional setup after loading the view, typically from a nib.  
  5.       
  6.     [self createTeamWithName:@"Heat"city:@"Miami"];  
  7.     [self createTeamWithName:@"Lakers"city:@"LA"];  
  8.     [self saveContext];  
  9.       
  10.     NSArray *teamArray = [self fetchTeamList];  
  11.     if (teamArray) {  
  12.         for (NSManagedObject *teamObject in teamArray) {  
  13.             NSString *teamName = [teamObject valueForKey:@"name"];  
  14.             NSString *teamCity = [teamObject valueForKey:@"city"];  
  15.             NSLog(@"Team info : %@, %@\n", teamName, teamCity);  
  16.         }  
  17.     }  
  18. }  

由于在context中创建的对象只是存在于内存中,所以我们还需要显式地把数据保存到sqlite文件里:

  1. #pragma mark -  
  2. #pragma mark - Save Context  
  3.   
  4. - (void)saveContext  
  5. {  
  6.     NSError *error = NULL;  
  7.     NSManagedObjectContext *moc = self.managedObjectContext;  
  8.     if (moc && [moc hasChanges] && ![moc save:&error]) {  
  9.         NSLog(@"Error %@, %@", error, [error localizedDescription]);  
  10.         abort();  
  11.     }  
  12. }  
最后,就是跑一下Demo,检验一下结果。
执行过一次程序后,我们可以搜索下cdNBA.sqlite文件,然后查看里面的数据: 
 

 
同时,控制台也输出了数据:
[plain] view plaincopy
  1. 2013-01-16 14:32:52.638 cdNBA[4717:c07] Team info : Heat, Miami  
  2. 2013-01-16 14:32:52.639 cdNBA[4717:c07] Team info : Lakers, LA  
分享到:
评论

相关推荐

    Core Data: Updated for Swift 3

    ### Core Data: 更新至 Swift 3 #### 一、引言与Swift的融合 本书旨在为读者提供关于如何最大限度地利用Core Data框架的同时避免潜在陷阱的清晰指导。本书假设读者已经熟悉Swift语言及其iOS开发环境,但对于无论是...

    Core Data by Tutorials v4.0 (Swift 4)

    《Core Data by Tutorials v4.0 (Swift 4)》是针对苹果开发平台的一款深入讲解Core Data技术的教程,特别适用于使用Swift 4编程语言的开发者。Core Data是Apple提供的一项强大的数据管理框架,它简化了应用程序的...

    Data Analytics with Hadoop: An Introduction for Data Scientists

    "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 Source Code (Swift4)

    《Core Data by Tutorials v4.0》是关于苹果开发框架Core Data的一份详细教程,主要针对Swift 4编程语言。Core Data是苹果提供的一种数据管理框架,它为iOS、macOS、watchOS和tvOS应用程序提供了模型层的抽象和管理...

    Pro Core Data for IOS

    第二章“Understanding Core Data”深入讲解了Core Data的基本概念和架构,为接下来的内容打下基础。第三章“Storing Data: SQLite and Other Options”探讨了数据存储的多种方式,特别是SQLite的使用,也涵盖了其他...

    ABAP Core Data Services .pdf

    #### 二、ABAP Core Data Services概述 **ABAP Core Data Services (CDS)** 是一种基于ABAP平台的现代数据定义语言,它允许开发者以声明式的方式定义数据模型。CDS提供了一套强大的工具和技术,用于创建和维护复杂...

    Core Data in Objective-C Data Storage and Management for iOS and OS X(3rd)

    5. **性能优化技巧**:提供了一系列提高Core Data性能的方法,包括缓存策略、批量操作等。 6. **高级主题**:包括错误处理、版本控制、实时同步等高级特性。 7. **实战案例分析**:通过具体的项目案例来展示如何在...

    《iOS Core Data高级编程 第二版》两本IOS数据编程之一

    《iOS Core Data高级编程 第二版》是针对iOS开发者在数据持久化领域的一本专业书籍,专门讲解了如何高效使用Core Data框架。这本书涵盖了Core Data的基础知识、高级概念以及实用技巧,适合有一定iOS开发经验,并希望...

    Core.Data.Updated.for.Swift.3

    本书《Core.Data.Updated.for.Swift.3》是关于学习使用Swift 3进行Core Data开发的指导书。Core Data是苹果公司提供的一个框架,用于管理应用程序数据模型对象的生命周期,它简化了数据持久化过程。在本书的介绍中,...

    Core Data objc中国(最新版已对应Swift4)花钱买的包含pdf,mobi,epub格式

    总之,《Core Data》这本书全面覆盖了从基础到高级的Core Data使用技巧,适合不同层次的iOS开发者阅读,无论你是初学者还是经验丰富的专业人士,都能从中获益匪浅。通过系统的学习和实践,你将能够更好地利用Core ...

    Core Data - Florian Kugler Daniel Eggert

    ### Core Data - Florian Kugler Daniel Eggert #### 一、引言与Swift语言的注意事项 本书由Florian Kugler和Daniel Eggert撰写,旨在为开发者提供一份详尽的Core Data指南。作为iOS开发中不可或缺的一部分,Core ...

    Core.Data.in.Swift.Data.Storage.and.Management.for.iOS.and.OSX

    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

    《Core Data by Tutorials》是一本专注于教授iOS开发者如何使用苹果公司的Core Data框架的教程书籍,它详尽地介绍了从基础到高级的Core Data技能。这本书特别为iOS 8和Xcode环境编写,提供了系统性地从零开始构建...

    Core Data 第二版 两本iOS数据编程经典书籍之二

    今天我们要介绍的《Core Data 第二版》就是一本关于iOS数据编程的经典之作。 《Core Data 第二版》是Marcus S. Zarra的力作,作为资深的iOS开发者和技术顾问,他在数据持久化领域的深入研究和丰富实践经验为本书...

    Core Data 示例源码 操作xml归档

    在OS X和iOS应用中,Core Data通常用于存储应用程序的数据,而这些数据可以是SQLite数据库、XML档案或二进制档案。 在XML归档方面,Core Data提供了将对象图转换为XML格式的能力,这在数据交换、备份或者跨平台传输...

    Core Data iOS Essentials

    ### Core Data iOS Essentials #### 一、概述 《Core Data iOS Essentials》是一本关于iOS应用程序开发的专业书籍,主要聚焦于如何使用Core Data框架来管理数据。本书由B. M. Harwani撰写,并由Packt Publishing...

    Core Data by Tutorials v6.zip

    总之,《Core Data by Tutorials v6》教程是iOS开发者深入学习Core Data的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中获益匪浅。通过这本书,你可以掌握从数据模型设计到实际应用开发的完整流程,提升...

    Core Data By Tutorials

    4. **Core Data堆栈(The Core Data Stack)**:Core Data堆栈是指一系列协同工作的对象,它们共同完成了数据的存储和检索。这包括托管对象模型(Managed Object Model)、持久化存储(Persistent Store)和持久化...

Global site tag (gtag.js) - Google Analytics