CoreData的增删改查和数据迁移示例

作为管理器,最基本的功能就是增删改查了。

1、插入

AppDelegate *app = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [app managedObjectContext];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"entityname" inManagedObjectContext:context];
[newManagedObject setValue:value forKey:@"propertyname"];
NSError *error;
if (![context save:&error]) {

    // Handle the error…
}

2、查询

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Hero" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc]initWithKey:@”name” ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc]initWithKey:@”secretIdentity” ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSArray *objecs = [context executeFetchRequest: fetchRequest error:&error];
if(objets==nil || error != nil){  //做处理
}

3、修改

-(void)applicationWillResignActive:(NSNotification *)notification{
    NSLog(@"applicationWillResignActive");
    //创建托管对象上下文
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
    [request setEntity:entityDescription];

    NSManagedObject *user = nil;
    NSError *error;
    NSArray *objets = [context executeFetchRequest:request error:&error];
    if(objets==nil){
        NSLog(@"There has a error!");
        //做错误处理
    }
    if([objets count]>0){
        //非第一次,更新数据
        NSLog(@"更新操作");
        user = [objets objectAtIndex:0];
    }else{
        NSLog(@"插入操作");
        //第一次保存,插入新数据
        user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:context];
    }
    [user setValue:self.serverIp.text forKeyPath:@"serverIp"];
    [user setValue:self.userName.text forKeyPath:@"userName"];
    [context save:&error];
}

4、删除

NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
[context deleteObject:[objecs objectIndex:index];
NSError *error;
if (![context save:&error]) {
    NSLog(@”Unresolved error %@, %@”, error, [error userInfo]);
    exit(-1); // Fail
}

5、数据迁移

当程序变化时,在很多简单的情况下,Coredata提供了轻量级的自动数据迁移,比如以下三个情况可以通过开启CoreData自动迁移实现:
1.简单的增加一个字段
2.把一个必填字段改为可选字段
3.把可选字段改为必填字段(但一定要定义默认值)

时间: 2024-10-08 06:22:53

CoreData的增删改查和数据迁移示例的相关文章

iOS CoreData (一) 增删改查

代码地址如下:<br>http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象,通过CoreData管理应用程序的数据模型,可以极大程度减少需要编写的代码数量! ##一.运行效果##二.程序实现 1. 首先创建一个coreData 模型文件:系统

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

增删改查的数据访问

一.查看数据 自然要用到造连接了,连接到数据库,然后写sql语句,执行sql语句,昨天学到的数据访问的过程 输出一张表的,用到的就是表的标签了,首先是输出一行的的内容,也就是表中的字段名的一行.例如: 1 2 3 4 5 6 7 8 9 <table width="100%" height="100%" border="1px" cellpadding="0" cellspacing="0">

CoreData之增删改查

1. 导入库文件CoreData.framework2. 在iOS的Core Data 中建Data Model文件 此时有三种选择 2.1. 选Data Model(如默认名Model.xcdatamodeld) 2.11 再点击下边的Add Entity按钮(修改名为Person) 2.12 再在Attributes中添加(成员变量)保存变量信息 2.13 再创建继承自NSManagedObject的模型Person 2.14 再在模型.h文件中创建Attributes中添加的成员变量 2.

【contentprovider系列5】综述使用contentprovider增删改查联系人数据

增加:一般操作的是data表. 查找:一般涉及的是多表的查询. 修改:也是修改的data表中的数据. 删除:涉及多表的查询,最后还是删除的data表中的数据. 综上,所有实际的数据都是存放在data表中的.raw_contacts表和data表是一对多的关系,而contacts表一行是多行row_contacts表的综合,因为可能设计多个账户.具体的示意图见如下:

java web 中 JSP增删改查mySQL数据

先在workbench中新建一个schema 比如叫 javatemp 再右键shcema里面的table新建一个叫new_table的table 然后设置一下table里面有什么 如图 右键new_table 显示前100行 可以先往里面手动添加一些数据 数据库的就到这 然后打开J2EE 新建Dynamic web project 先导入连接mysql的驱动jar包 直接将jar包拖到WEB-INF下的lib目录 在webContent里新建读取数据库jsp文件 代码如下 <%@page im

MyBatis对数据库的增删改查操作,简单示例

之前一直实用Hibernate进行开发,最近公司在使用Mybatis,根据网上的示例,做了一个简单的Demo,以便日后复习 总体结构如下图 首先是创建一个工程,然后导入两个jar包,然后编写mybatis的jdbc配置文件Configuration.xml Configuration.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-/

django,form表单,数据库增删改查

Django 02 复习:  Django下载:   在命令行输入:    pip3 install django==1.11.11    在这里不要用最新的3.7,推荐使用3.6/3.5/3.4    判断下载成功:     django-admin    创建django项目:     django-admin startproject 项目名     会创建跟项目同名的文件夹     settings.py 暴露给用户可配置的配置文件     urls.py     路由与视图函数对应文件

Zookeeper demo增删改查

Zookeeper 的增删改查demo代码 public class SimpleZkClient { private static final String connectString = "mini1:2181,mini2:2181,mini3:2181"; private static final int sessionTimeout = 2000; ZooKeeper zkClient = null; @Before public void init() throws Exce