zoukankan      html  css  js  c++  java
  • CoreData基本使用-02-

    //
    //  ViewController.m
    //  01-CoreData基本使用
    //
    //  Created by mac on 16/5/4.
    //  Copyright © 2016年 mac. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <CoreData/CoreData.h>
    #import "User.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController {
        
        NSManagedObjectContext *_managerObjectContext;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self openDataBase];
    //    [self addUser];
    //    [self searchUserWithUserID:55];
        [self updateUser];
        [self deleteUser];
        
        NSLog(@"---------%@", NSHomeDirectory());
    }
    
    /**
     *  1. 打开数据库
     */
    - (void)openDataBase {
        
        //1. 创建数据库文件
        NSString *dataBaseFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/User.sqlite"];
        NSURL *dataBaseFileUrl = [NSURL fileURLWithPath:dataBaseFilePath];
        
        //2. 创建模型描述文件
        /** a. 创建模型描述文件 b. */
        
        //3. 获取模型描述文件路径
        NSURL *entityFileURL = [[NSBundle mainBundle] URLForResource:@"UserModel" withExtension:@"momd"];
        NSLog(@"%@", entityFileURL);
        
        //4. 通过模型描述文件 来创建pcs(持久化存储坐标)
        
        NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:entityFileURL];// model
        NSPersistentStoreCoordinator *pcs = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
        
        //5.创建实体数据库文件
        NSError *error = nil;
        [pcs addPersistentStoreWithType:NSSQLiteStoreType configuration:NULL URL:dataBaseFileUrl options:nil error:&error];
        if (error) {
            NSLog(@"失败");
        } else {
            
            NSLog(@"成功");
        }
        
        _managerObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        _managerObjectContext.persistentStoreCoordinator = pcs;
    }
    /**
     *  2. 添加数据
     */
    - (void)addUser {
        
      /*  //1. 创建MO对象并且添加到objectContext
    //    User *user1 = [[User alloc] init];
        User *user1 = (User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:_managerObjectContext];
        
        //2. 使用context 将数据存储到数据库
        user1.username = @"zhangsan";
        user1.password = @"1234";
        user1.user_id = @1001;
        
        //3. 使用context将数据存储到数据库
        NSError *error = nil;
        [_managerObjectContext save:&error];
        if (error) {
            NSLog(@"保存失败%@", error);
        } else {
            
            NSLog(@"保存成功");
        } */
        
        
        for (int i=0; i<100; i++) {
            
            User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:_managerObjectContext];
            
            user.username = [NSString stringWithFormat:@"user%i", i];
            user.user_id = @(i);
            user.password = @"123456";
            
            //使用context将数据存储到数据库
            NSError *error = nil;
            [_managerObjectContext save:&error];
            if (error) {
                NSLog(@"保存失败");
            } else {
                NSLog(@"保存成功");
            }
        }
        
    }
    /**
     *  3. 查询数据
     */
    - (void)searchUserWithUserID:(NSInteger)userID {
        
        //1. 构建查询请求
        NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
        
        //2. 设置查询的条件
        //3. 使用谓词来设定查询的条件
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user_id>%li",userID];
        fetchRequest.predicate = predicate;
        
        //4. 执行查询请求
        NSError *error = nil;
        NSArray *resultArray = [_managerObjectContext executeFetchRequest:fetchRequest error:&error];
        
        //5. 处理查询结果
        if (error) {
            NSLog(@"查询出错%@", error);
        } else {
            
            //查询成功
            for (User *user in resultArray)
                NSLog(@"name = %@, password = %@, user_id = %@", user.username, user.password, user.user_id);
            }
    }
    /**
     *  4. 修改数据
     */
    - (void)updateUser {
        
        //0. 将密码修改为88888888
        
        //1. 从数据库中查到需要修改的数据
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user_id=88"];
        request.predicate = predicate;
        
        //2. 执行查询请求
        NSArray *array = [_managerObjectContext executeFetchRequest:request error:nil];
        
        //3. 修改这些数据
        for (User *user in array) {
            user.password = @"88888888";
        }
        
        //4. 将修改后的数据保存到数据库
        [_managerObjectContext save:nil];
    }
    /**
     *  5. 删除数据
     */
    - (void)deleteUser {
        
        //1. 查询需要删除的用户对象
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user_id=86"];
        request.predicate = predicate;
    
        //2. 执行查询的请求
        NSArray *array = [_managerObjectContext executeFetchRequest:request error:nil];
        
        //3. 修改数据
        for (User *user in array) {
            [_managerObjectContext deleteObject:user];
        }
        
        //4. 将修改后的数据保存到数据库
        [_managerObjectContext save:nil];
    
    }
    
    @end
    时光见证了成长,还很无知,我想一点点幼稚转为有知!
  • 相关阅读:
    mac github访问不稳定解决办法
    前后端项目部署-2, flask+Gunicorn+gevent,docker部署,
    前后端项目部署-1, flask,只有flask,一个最简单的flask项目部署到Docker的过程,
    mac,VMware,安装centos7,虚拟机,无界面
    深网简介
    mitmproxy抓包工具使用 for mac
    安卓抓取的另外一种思路
    安卓手机设置权限,adb pull permission denied解决办法
    爬虫工程师到底为什么要学习安卓逆向?
    爬虫工程师日常都是做什么。
  • 原文地址:https://www.cnblogs.com/foreveriOS/p/5459598.html
Copyright © 2011-2022 走看看