iOS基础--CoreData 总结

作者: 云之君兮鹏 | 来源:发表于2016-03-30 22:32 被阅读265次

    CoreData 数据持久化框架是Cocoa API的一部分,它允许按照 实体-属性-值 模型组织数据,并以XML(做MAC-os用), 二进制, 或者SQLite数据文件的格式持久化数据. CoreData主要提供 对象-关系映射(ORM)功能,把OC对象转化为数据保存到文件,也可以数据转化成OC对象.

    CoreData与SQLite区别 :

    CoreData是官方推出的数据持久化框架,SQLite是苹果使用别人开发好的一个动态库,本质是关系型数据库.

    CoreData是iOS平台下的一个数据持久化的方式,不可以跨平台使用,Sqlite可以跨平台使用.

    核心对象:

    NSPersistentStoreCoordinator  数据连接器类(中间人,不能直接控制)

    NSManagedObjectContext       数据管理器类  (临时数据库 )

    NSManagedObject                   数据管理类

    NSManagedObject                   数据模型器类

    NSEntityDescription                  实体描述类

    操作过程: context想要获取值,先要告诉连接器,我要什么东西,连接器再告诉store,你给我什么东西,store去找,找到之后返回给context.

    数据库的简单操作

    .xcdatamodeld里


    Add Entity 添加实体类

    修改实体类名

    修改属性名与类型

    创建文件  command+N —> CoreData —> NSManageObjuect subclass

    ViewController.m 里

    导入框架及各种头文件

    //coreData的框架

    //导入框架的方式: <框架名字/头文件名字>

    #import

    #import"Person.h"

    #import"AppDelegate.h"

    @interfaceViewController()

    @property(nonatomic,strong)UITableView*tableView;

    //临时数据库

    @property(nonatomic,strong)NSManagedObjectContext*objectContext;

    //创建一个可变数组,配合table设置cell的相关设置

    @property(nonatomic,strong)NSMutableArray*dataArray;

    @end

    @implementationViewController

    - (void)viewDidLoad {

    [superviewDidLoad];

    self.dataArray= [NSMutableArrayarray];

    [selfsetup];

    //

    [selfappdelegate];

    //调用searchAll

    [selfsearchAll];

    }

    - (void)setup{

    self.tableView= [[UITableViewalloc]initWithFrame:[UIScreenmainScreen].boundsstyle:(UITableViewStylePlain)];

    self.tableView.backgroundColor= [UIColorredColor];

    [self.viewaddSubview:self.tableView];

    self.tableView.dataSource=self;

    self.tableView.delegate=self;

    [self.tableViewregisterClass:[UITableViewCellclass]forCellReuseIdentifier:@"cell"];

    }

    - (void)appdelegate{

    //通过单例的代理协议的代理人,获取到我们最开始使用的AppDelegate

    AppDelegate*app = (AppDelegate*)[UIApplicationsharedApplication].delegate;

    //获得 数据库的数据连接器

    self.objectContext= app.managedObjectContext;

    self.navigationItem.rightBarButtonItem= [[UIBarButtonItemalloc]initWithBarButtonSystemItem:(UIBarButtonSystemItemAdd)target:selfaction:@selector(barButtonItemClicked)];

    }

    //点击方法

    - (void)barButtonItemClicked{

    //NSEntityDescription :实体描述类,通过类方法创建

    //参数1 :表示这个实体描述类描述的是哪个实体

    //参数2 :表示的是在context里创建一个描述,告诉context我要往里面插入以object了

    NSEntityDescription*description = [NSEntityDescriptionentityForName:@"Person"inManagedObjectContext:self.objectContext];

    //创建一个实体类

    //参数1 :实体类描述

    //参数2 :在context里放入这个类

    Person*person = [[Personalloc]initWithEntity:descriptioninsertIntoManagedObjectContext:self.objectContext];

    intnumber =arc4random() % 2000;

    person.name= [NSStringstringWithFormat:@"%d号",number];

    [selfinsertObject:person];

    }

    // 增向coreData中插入一条数据

    - (void)insertObject:(Person*)person{

    NSError*error =nil;

    //把context保存到本地

    //这个方法执行之后,本地数据才发生改变

    [self.objectContextsave:&error];

    if(error ==nil) {

    NSLog(@"保存正确");

    [self.dataArrayaddObject:person];

    NSIndexPath*indexPath = [NSIndexPathindexPathForRow:self.dataArray.count-1inSection:0];

    [self.tableViewinsertRowsAtIndexPaths:@[indexPath]withRowAnimation:(UITableViewRowAnimationMiddle)];

    }else{

    NSLog(@"错误%@",error);

    }

    }

    //  删

    -(void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath{

    if(editingStyle ==UITableViewCellEditingStyleDelete) {

    //获取想要删的数据

    Person*person =self.dataArray[indexPath.row];

    //在context中将这条数据删除

    [self.objectContextdeleteObject:person];

    NSError*error =nil;

    [self.objectContextsave:&error];

    if(error ==nil) {

    //先删除数据

    [self.dataArrayremoveObject:person];

    //然后更新UI

    [self.tableViewdeleteRowsAtIndexPaths:@[indexPath]withRowAnimation:(UITableViewRowAnimationFade)];

    }

    }

    }

    // 改

    -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{

    //知道改谁

    Person*person =self.dataArray[indexPath.row];

    intnumber =arc4random() % 2000;

    person.name= [NSStringstringWithFormat:@"%d好", number];

    NSError*error =nil;

    [self.objectContextsave:&error];

    if(error ==nil) {

    [self.tableViewreloadRowsAtIndexPaths:@[indexPath]withRowAnimation:(UITableViewRowAnimationMiddle)];

    }

    }

    // 查

    - (void)searchAll{

    //创建一个查询操作,查询哪个表里的内容

    NSFetchRequest*request = [[NSFetchRequestalloc]initWithEntityName:@"Person"];

    //接收查询数据

    NSError*error =nil;

    //

    NSArray*array = [self.objectContextexecuteFetchRequest:requesterror:&error];

    //判断error

    if(error ==nil) {

    //如果是,那就放到dataArray里面

    [self.dataArraysetArray:array];

    [self.tableViewreloadData];

    }else{

    }

    }

    //tableView必须实现的方法

    -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{

    returnself.dataArray.count;

    }

    -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

    UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:@"cell"forIndexPath:indexPath];

    //创建实例接收

    Person*person =self.dataArray[indexPath.row];

    cell.textLabel.text= person.name;

    returncell;

    }

    @end

    相关文章

      网友评论

        本文标题:iOS基础--CoreData 总结

        本文链接:https://www.haomeiwen.com/subject/surelttx.html