`
dcj3sjt126com
  • 浏览: 1871710 次
  • 性别: 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.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 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 by Tutorials

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

    Core Data 示例源码 操作xml归档

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

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

    1. 《Core Data 第二版》是一本专注于iOS数据编程的书籍,由Marcus S. Zarra编写,属于The Pragmatic Bookshelf出版社,地址位于达拉斯和北卡罗来纳州的罗利。 2. 本书是关于iOS、OSX及iCloud数据存储与管理的讨论,...

    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