美文网首页
CoreData简单使用

CoreData简单使用

作者: 雾霭天涯 | 来源:发表于2019-03-20 14:42 被阅读0次

github地址
借鉴文章

概念介绍
coreData
NSManagedObjectContext 管理对象,上下文,持久性存储模型对象,处理数据与应用的交互,托管对象上下文,数据库的大多数操作是在这个类操作
NSManagedObjectModel 被管理的数据模型,数据结构,托管对象模型,其中一个托管对象模型关联到一个模型文件,里面存储着数据库的数据结构。
NSPersistentStoreCoordinator 添加数据库,设置数据存储的名字,位置,存储方式,持久化存储协调器,主要负责协调上下文存储的区域的关系。
NSManagedObject 被管理的数据记录,托管对象类,其中CoreData里面的托管对象都会继承此类。
NSFetchRequest 数据请求
NSEntityDescription 表格实体结构
NSPredicate 过滤条件,找到要修改的对象

model文件参考

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN

@interface User : NSManagedObject
//属性的类型一旦创建不可修改,如需修改,必须删除APP中旧的数据库文件,否则崩溃
@property (nonatomic,strong) NSString* name;
@property (nonatomic,assign) BOOL sex;
@property (nonatomic,strong)UIImageView* image;
@property (nonatomic,strong) NSString* aID;
@property (nonatomic,assign) float height;//和CoreDataProject.xcdatamodeld中的UserEntity中的类型一致,不可以是CGFloat
@property (nonatomic,assign) NSInteger age;
@end

NS_ASSUME_NONNULL_END

ViewController文件参考

//
//  ViewController.m
//  CoreDataProject
//
//  Created by alex black on 2019/3/20.
//  Copyright © 2019 JTB.com. All rights reserved.
//

#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "AppDelegate.h"
#import "User.h"
@interface ViewController ()
@property (nonatomic,strong) NSManagedObjectContext *context;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    //CoreDataProject.xcdatamodeld文件 编译后就是 CoreDataProject.momd 所以名字要对应
    NSURL *modelPath = [[NSBundle mainBundle] URLForResource:@"CoreDataProject" withExtension:@"momd"];
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelPath];
    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    NSString *dataPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    dataPath = [dataPath stringByAppendingFormat:@"/People.sqlite"];//自己定义的数据库名字 千万别忘记加/ 否则真机无法创建相应文件
    [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dataPath] options:nil error:nil];

    context.persistentStoreCoordinator = coordinator;
    self.context = context;
}
#pragma mark - 插入操作
- (void)insertMethod:(NSManagedObjectContext*)context
{
    //@"UserEntity" 要和 CoreDataProject.xcdatamodeld文件中定义的model名字一样  特别注意:User中的属性描述必须和UserEntity的属性描述一致,否则无法存入,例如User的height是CGFloat 而 UserEntity的height是Float,类型不一致无法存入信息,也无法修改
    User* obj =  (User*)[NSEntityDescription insertNewObjectForEntityForName:@"UserEntity" inManagedObjectContext:context];
    obj.name = @"ee";
    obj.sex = YES;
    obj.age = 18;
    obj.height = 180;
    
    User* obj2 =  (User*)[NSEntityDescription insertNewObjectForEntityForName:@"UserEntity" inManagedObjectContext:context];
    obj2.name = @"pp";
    obj2.sex = NO;
    obj2.age = 16;
    obj2.height = 160;
    
    NSError *error1;
    if (context.hasChanges) {
        [context save:&error1];
    }
    if (error1) {
        NSLog(@"error1 = %@",error1);
    }
}
#pragma mark - 删除操作
- (void)deleteMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@",@"ee"];
    request.predicate = predicate;
    NSError *error2;
    NSArray<User*> *deleteArr = [context executeFetchRequest:request error:&error2];
    [deleteArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [context deleteObject:(NSManagedObject*)obj];
    }];
    if ([context hasChanges]) {
        [context save:nil];
    }
    if (error2) {
        NSLog(@"%@",error2);
    }
}
#pragma mark - 修改操作
- (void)changeMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name=%@",@"pp"];
    request1.predicate = predicate1;
    NSError *error3 = nil;
    NSArray<User*> *chageArr = [context executeFetchRequest:request1 error:&error3];
    [chageArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        obj.height = 133;
    }];
    if ([context hasChanges]) {
        [context save:nil];
    }
    if (error3) {
        NSLog(@"%@",error3);
    }
}
#pragma mark - 查找操作
- (void)queryMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request4 = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSError *error4 = nil;
    NSArray<User *> *quertArr = [context executeFetchRequest:request4 error:&error4];
    [quertArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"User Name : %@, Height : %@, age : %d", obj.name, @(obj.height), obj.age);
    }];
    
    // 错误处理
    if (error4) {
        NSLog(@"%@", error4);
    }
}
- (IBAction)buttonClick:(UIButton *)sender {
    if (sender.tag == 1) {
        [self insertMethod:self.context];
    }else if (sender.tag == 2) {
        [self deleteMethod:self.context];
    }else if (sender.tag == 3) {
        [self changeMethod:self.context];
    }else if (sender.tag == 4) {
        [self queryMethod:self.context];
    }
}

@end

相关文章

  • 【优化篇】coreData数据迁移

    前面有有写过一篇关于coredata简单使用的教程【进阶篇】iOS coreData简单使用教程 说起coreda...

  • 第五篇:CoreData

    CoreData 初识CoreData 基础使用CoreData 高级使用CoreData 使用进阶CoreDat...

  • MG--Swift3.0简单使用CoreData

    问题:什么时候使用CoreData?数据模型之间关系比较简单的时候 如何简单使用CoreData1.创建一个项目勾...

  • CoreData 简单使用

    0.0 coredata 相关术语及简介, 1.查看运行时的sql语句,在Product-Scheme-Edit ...

  • CoreData简单使用

    github地址借鉴文章 概念介绍coreDataNSManagedObjectContext 管理对象,上下文,...

  • 我要娶你做我的CoreData!

    一、CoreData的简单使用 准备工作 创建数据库新建文件,选择CoreData -> DataModel添加实...

  • CoreData 的简单使用

    CoreData 的简单使用 之前学了CoreData, 但是几周没用就忘记了, 这里整理下笔记, 以便忘记的时候...

  • CoreData的简单使用

    CoreData入门 CoreData简介 iOS开发中实现数据持久化存储的一种重要手段 提供了对象-关系映射的功...

  • CoreData的简单使用

    CoreData简介 CoreData用于做数据的持久化. CoreData不是数据库,但它可以通过数据库或XML...

  • coreData的简单使用

    这里只记录coreData的简单使用(增,删,改,查) 创建Data Model(注意,基础工程在创建的时候并没有...

网友评论

      本文标题:CoreData简单使用

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