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

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.");  
    } 

7.删除数据

复制代码 代码如下:

/* 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]; 
    if ([persons count] > 0){ 
        /* Delete the last person in the array */ 
        Person *lastPerson = [persons lastObject]; 
        [self.managedObjectContext deleteObject:lastPerson]; 
        NSError *savingError = nil; 
        if ([self.managedObjectContext save:&savingError]){ 
            NSLog(@"Successfully deleted the last person in the array."); 
        } else { 
            NSLog(@"Failed to delete the last person in the array."); 
        } 
    } else {  
        NSLog(@"Could not find any Person entities in the context.");  
    }  

8.排序

复制代码 代码如下:

<pre code_snippet_id="243955" snippet_file_name="blog_20140319_5_4289257" name="code" class="objc">NSSortDescriptor *ageSort =  
[[NSSortDescriptor alloc] initWithKey:@"age"  
ascending:YES];  
NSSortDescriptor *firstNameSort =  
[[NSSortDescriptor alloc] initWithKey:@"firstName"  
ascending:YES];  
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:  
ageSort,  
firstNameSort, nil nil];  
fetchRequest.sortDescriptors = sortDescriptors; </pre><p></p> 
<pre></pre> 
<p></p> 
<p style="background-color:rgb(255,255,255); margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:verdana,'ms song',Arial,Helvetica,sans-serif; line-height:19.09090805053711px"> 
<span style="background-color:rgb(255,255,255)"><span style="font-size:18px"><br> 
</span></span></p> 
<span style="background-color:rgb(255,255,255)">注意</span><span style="font-size:18px; background-color:rgb(255,255,255)">ascending:YES 属性决定排序顺序</span><span style="background-color:rgb(255,255,255)"><span style="font-size:18px"><br> 
<br> 
<br> 
</span></span><br> 

时间: 2024-09-28 15:41:20

详解iOS应用开发中Core Data数据存储的使用_IOS的相关文章

iOS App开发中Core Data框架基本的数据管理功能小结_IOS

一.何为CoreDataCoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL有一个十分明显的缺陷,对于常规数据模型的表,其处理起来是没问题的,例如一个班级表,其

详解iOS App开发中session和coockie的用户数据存储处理_IOS

NSURLSession在iOS7之后,NSURLSession作为系统推荐使用的HTTP请求框架,在进行前台请求的情况下,NSURLSession与NSURLConnection并无太大差异,对于后台的请求,NSURLSession更加灵活的优势就将展现无遗.1.NSURLSession集合的类型 NSURLSession类提供3中Session类型: (1)Default类型:提供前台请求相关方法,支持配置缓存,身份凭证等. (2)Ephemeral类型:即时的请求类型,不使用缓存,身份凭证

详解iOS应用开发中的ARC内存管理方式_IOS

提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 零.简介ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除了weak指针系统),它也不是类似于其它语言中的垃圾收集器.因此 ARC 和

详解iOS App开发中Cookie的管理方法_IOS

一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的Cookie信息一并发送到服务端,服务端根据Cookie信息是否有效来判断此用户是否可以自动登录. 二.iOS中进行Cookie管理的两个类 iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTT

详解iOS应用开发中autoresizing尺寸自动适应属性的用法_IOS

前言:现在已经不像以前那样只有一个尺寸,现在最少的iPhone开发需要最少需要适配三个尺寸.因此以前我们可以使用硬坐标去设定各个控件的位置,但是现在的话已经不可以了,我们需要去做适配,也许你说可以使用两套UI或两套以上的UI,但那样不高效也不符合设计.iOS有两大自动布局利器:autoresizing 和 autolayout(autolayout是IOS6以后新增).autoresizing是UIView的属性,一直存在,使用也比较简单,但是没有autolayout那样强大.如果你的界面比较简

详解iOS App开发中UIViewController的loadView方法使用_IOS

当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewController就会自动调用loadView这个方法.这个方法就会加载或者创建一个view对象,赋值给view属性. loadView默认做的事情是:如果此ViewController存在一个对应的nib文件,那么就加载这个nib.否则,就创建一个UIView对象. 如果你用Interface Builder来创建界面,那么不应该重载这个方法. 控制器的loadView方法以及view属性控

详解iOS游戏开发中Cocos2D的坐标位置关系_IOS

接触Cocos2D有段时间了,今天特意研究了下Cocos2D坐标系中各种位置关系,anchor属性,CCNode坐标和地图坐标转换.     先看一段代码: 复制代码 代码如下: -(id) init  {      // always call "super" init      // Apple recommends to re-assign "self" with the "super" return value      if( (sel

详解iOS App开发中改变UIButton内部控件的基本方法_IOS

UIButton内部默认有个UIImageView.UILabel控件,可以分别用下面属性访问: 复制代码 代码如下: @property(nonatomic,readonly,retain) UIImageView *imageView; @property(nonatomic,readonly,retain) UILabel     *titleLabel; UIButton之所以能显示文字,完全是因为它内部的titleLabel也,也就是说,UIButton的setTitle:forSta

详解iOS应用开发中使用设计模式中的抽象工厂模式_IOS

概述 我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了"开放-关闭原则":工厂方法模式克服了简单工厂模式的缺点,将产品的创建工作放到具体的工厂类,每个工厂类负责生成一个产品.但是在实际应用中,一个工厂类只创建单个产品的情况很少,一般一个工厂类会负责创建一系列相关的产品,如果我们要设计这样的系统,工厂方法模式显然不能满足应用的需求,本章要介绍的抽象工厂模式,可以很好地解决一系列产品创建的问题. 定义 "提供一个创建一系列相关或相互依赖对象的接口,而无需指定