ios应用数据存储方式(Coredata)

寵の児 提交于 2020-02-15 16:52:03
1.Core Data 是数据持久化存储的最佳方式
2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型
3.好处:能够合理管理内存,避免使用sql的麻烦,高效
4.注意CoreData的创建方式
 
使用步骤 : 创建数据库- - -获取程序中的appdelegate对象 - - 然后就可以进行增查改删
增加步骤 :1.初始化实体--2.增加数据 - -3.保存coredata数据
 
查询步骤 : 1.创建一个空语句 - -2.创建要查询的实体--3.创建要查询的语句—--4.对返回的结果进行遍历
 
Student.h
 
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Student : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * age;

@end
======================================================
Student.m
 
#import "Student.h"
@implementation Student

@dynamic name;
@dynamic age;

@end
======================================================
ViewController.m
 
#import "ViewController.h"
#import "AppDelegate.h"
#import "Student.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //获取程序中的appdelegate对象,以便使用coredata的相关属性及方法(coredata的属性和方法在appdelegate.h中存着)
    AppDelegate * _appdelegate = [UIApplication sharedApplication].delegate;
   
    //coredata存储数据========增加数据=============
   
    //初始化实体,注意@“”里面是存放实体类名
    Student * s = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_appdelegate.managedObjectContext];
    s.name = @"我是一把神经刀";
    s.age = [NSNumber numberWithInteger:22];
    [_appdelegate saveContext];//用来保存coredata数据
    NSLog(@"%@",NSHomeDirectory());
//     NSLog(@"%@",s);
   
    Student * s10 = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_appdelegate.managedObjectContext];
    s10.name = @"小莫";
    s10.age = [NSNumber numberWithInteger:30];
    [_appdelegate saveContext];
//    NSLog(@"%@",s10);
  
  ==============查询数据===================
   
     //查询:只有123句时,代表查询所有,56结合,设置查询条件
   /*1*/ NSFetchRequest * request = [[NSFetchRequest alloc] init];//创建一个空语句
    /*2*/NSEntityDescription * en = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:_appdelegate.managedObjectContext];//创建要查询的实体
   
    /*3*/[request setEntity:en];//创建要查询的语句
    /*4*/NSPredicate * p = [NSPredicate predicateWithFormat:@"age > %d",20];//这是查询条件
    /*5*/[request setPredicate:p];//将查询条件放入查询语句
  
    [_appdelegate saveContext];
    NSArray * arr1 = [_appdelegate.managedObjectContext executeFetchRequest:request error:nil];//执行查询语句,并且返回查询结果

    for (Student *s in arr1) {//-------对返回的结果进行遍历
         NSLog(@"%@,%@",s.name,s.age);
    }
   
    //==============修改数据=============
   
        NSArray * arr = [_appdelegate.managedObjectContext executeFetchRequest:request error:nil];//执行查询语句
        for (Student * s1 in arr) {
            s10.name = @"张三";//替换数据
            s10.age = [NSNumber numberWithInteger:32];
            NSLog(@"%@",s1.name);
    }
   
    //修改数据每次只能修改一个,想要修改多个,需要重新创建修改
    NSArray * arr2 = [_appdelegate.managedObjectContext executeFetchRequest:request error:nil];//执行查询语句
    for (Student * s2 in arr2) {
        s.name = @"张小花";//替换数据
        s.age = [NSNumber numberWithInteger:100];
        NSLog(@"%@",s2.name);
    }
 
    //    ============删除=====================
   
    NSFetchRequest *f1 = [[NSFetchRequest alloc] init];
    NSEntityDescription *en1 = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:_appdelegate.managedObjectContext];
   
    [f1 setEntity:en1];
    NSPredicate *p1 = [NSPredicate predicateWithFormat:@"name = %@",@"王五"];
    [f1 setPredicate:p1];
   
   
    NSArray *rArr = [_appdelegate.managedObjectContext executeFetchRequest:f1 error:nil];
    for (Student *s in rArr) {
        [_appdelegate.managedObjectContext deleteObject:s];
    }
    NSFetchRequest *f2 = [[NSFetchRequest alloc] init];
    [f2 setEntity:en1];
   
    NSArray *r2 = [_appdelegate.managedObjectContext executeFetchRequest:f2 error:nil];
   
    NSLog(@"%@",r2);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!