详解iOS应用开发中Core Data数据存储的使用


本文整理自网络,侵删。

1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中
 
2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法

代码如下:

<span style="font-size:18px;"> 
 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
 
- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory;</span> 

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。

(1)NSManagedObjectModel(被管理的对象模型)

相当于实体,不过它包含 了实体间的关系

(2)NSManagedObjectContext(被管理的对象上下文)

操作实际内容

作用:插入数据  查询  更新  删除

(3)NSPersistentStoreCoordinator(持久化存储助理)

相当于数据库的连接器

(4)NSFetchRequest(获取数据的请求)

相当于查询语句

(5)NSPredicate(相当于查询条件)

(6)NSEntityDescription(实体结构)

(7)后缀名为.xcdatamodel的包

里面的.xcdatamodel文件,用数据模型编辑器编辑

编译后为.momd或.mom文件,这就是为什么文件中没有这个东西,而我们的程序中用到这个东西而不会报错的原因。


3.如果想创建一个实体对象的话,需要点击.xcdatamodel,Add Entity,添加想要的字段

4.生成对象文件,command+n,然后选中CoreData里的NSManagerObjectSubClass进行关联,选中实体创建

5.添加数据

代码如下:

Person *newPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 
     
    if (newPerson == nil){ 
        NSLog(@"Failed to create the new person."); 
        return NO; 
    } 
     
    newPerson.firstName = paramFirstName; 
    newPerson.lastName = paramLastName; 
    newPerson.age = [NSNumber numberWithUnsignedInteger:paramAge]; 
    NSError *savingError = nil; 
     
    if ([self.managedObjectContext save:&savingError]){ 
        return YES; 
    } else { 
        NSLog(@"Failed to save the new person. Error = %@", savingError); 
    } 

NSEntityDescription(实体结构)相当于表格结构

6.取出数据查询

代码如下:

/* Create the fetch request first */ 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    /* Here is the entity whose contents we want to read */ 
    NSEntityDescription *entity = 
    [NSEntityDescription 
     entityForName:@"Person" 
     inManagedObjectContext:self.managedObjectContext]; 
    /* Tell the request that we want to read the
     contents of the Person entity */ 
    [fetchRequest setEntity:entity]; 
    NSError *requestError = nil; 
    /* And execute the fetch request on the context */ 
    NSArray *persons = 
    [self.managedObjectContext executeFetchRequest:fetchRequest 
                                             error:&requestError]; 
    /* Make sure we get the array */ 
    if ([persons count] > 0){ 
        /* Go through the persons array one by one */ 
        NSUInteger counter = 1; 
        for (Person *thisPerson in persons){ 
            NSLog(@"Person %lu First Name = %@", 
                  (unsigned long)counter,  
                  thisPerson.firstName);  
            NSLog(@"Person %lu Last Name = %@",  
                  (unsigned long)counter,  
                  thisPerson.lastName); 
            NSLog(@"Person %lu Age = %ld", 
                  (unsigned long)counter, 
                  (unsigned long)[thisPerson.age unsignedIntegerValue]); 
            counter++; 
        } 
    } else { 
        NSLog(@"Could not find any Person entities in the context.");  
    } 

阅读剩余部分

相关阅读 >>

微软官方sqlhelper类 数据库辅助操作类 font color=red原创font

基于java实现一个简单的单词本android app的实践

python操作Sqlite简明教程

android系统的五种数据存储形式实例(一)

.net6跨服务器联表查询操作mysql、oracle、sqlserver等相互联表

python 操作Sqlite数据库的方法

android中数据库常见操作实例分析

scrapy+scrapyd+gerapy爬虫调度框架超详细教程

windows平台python连接Sqlite3数据库的方法分析

android操作Sqlite基本用法

更多相关阅读请进入《Sqlite》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...