CoreData的简单使用

.xcdatamodeld的生成.

创建项目需要勾选上Use Core Data

系统会自动生成

如果数据库需求是后加的,没有在项目创建的时候加也没有关键,我们可以新建一个 command + N

然后点击下一步输入下名字就生成成功了

 

点击 Add Entity 就会生成相应的表

我们可以双击表面 对其进行修改 红框中的加号都是为这个表添加属性

属性的名字也和表面一下 可以双击进行修改

type为你生成的属性的类型

如果你也是用OC的话 要将红框部分改为OC不然导出的是Swift

将项目改为不自动生成 不然生成model类之后会报错

写好之后 就可以将其导出了 更新的时候也可以用同样的方法 

下面创建一个管理类


#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

#define CoreManagerInstance [CoreDataStackManager shareInstance]

NS_ASSUME_NONNULL_BEGIN

@interface CoreDataStackManager : NSObject

/// 单例
+ (CoreDataStackManager *) shareInstance;

/// 管理对象上下文
@property (strong, nonatomic) NSManagedObjectContext *managerContenxt;

/// 模型对象
@property (strong, nonatomic) NSManagedObjectModel *managerModel;

/// 存储调度器
@property (strong, nonatomic) NSPersistentStoreCoordinator *maagerDinator;

// 保存数据的方法
- (void)save;

@end

NS_ASSUME_NONNULL_END

#import "CoreDataStackManager.h"

@implementation CoreDataStackManager

/// 单例的实现
+ (CoreDataStackManager *)shareInstance
{
    static CoreDataStackManager *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[CoreDataStackManager alloc] init];
    });
    
    return instance;
}

- (NSURL *)getDocumentUrlPath
{
    ///获取文件位置
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

// 懒加载managerContenxt
- (NSManagedObjectContext *)managerContenxt
{
    if (_managerContenxt != nil) {
        return _managerContenxt;
    }
    
    _managerContenxt = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    
    /// 设置存储调度器
    [_managerContenxt setPersistentStoreCoordinator:self.maagerDinator];
    
    return _managerContenxt;
}

///懒加载模型对象
- (NSManagedObjectModel *)managerModel
{
    if (_managerModel != nil) {
        return _managerModel;
    }
    
    _managerModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    
    return _managerModel;
}

- (NSPersistentStoreCoordinator *)maagerDinator
{
    if (_maagerDinator != nil) {
        
        return _maagerDinator;
    }
    
    _maagerDinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managerModel];
    
    //添加存储器
    /**
     * type:一般使用数据库存储方式NSSQLiteStoreType
     * configuration:配置信息 一般无需配置
     * URL:要保存的文件路径
     * options:参数信息 一般无需设置
     */
    
    // 拼接url路径
    NSURL *url = [[self getDocumentUrlPath] URLByAppendingPathComponent:@"sqlit.db" isDirectory:YES];
    
    [_maagerDinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];
    
    return _maagerDinator;
}

- (void)save
{  ///保存数据
    [self.managerContenxt save:nil];
}

@end
#import "StudentManage.h"

@implementation StudentManage

/// 查看数据库路径.
+ (void)db_path {
    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    NSString *realPath = [documentPath stringByAppendingPathComponent:@"sqlit.db"];
    
    NSLog(@"数据库所在路径:%@", realPath);
}

/// 插入数据
+ (void)insertDataByDic:(NSDictionary *)dic {
    [StudentManage db_path];
    Student *studentDB = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:CoreManagerInstance.managerContenxt];
    studentDB.sex = [dic[@"sex"] intValue];
    studentDB.name = dic[@"name"];
    studentDB.age = [dic[@"age"] intValue];
    [CoreManagerInstance save];
}

/// 根据性别删除.
+ (void)deleteBySex:(int)sex {
    //1.创建一个查询请求
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    //2.创建查询谓词(查询条件)
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sex = %d",sex];
    //3.给查询请求设置谓词
    request.predicate = predicate;
    //4.查询数据
    NSArray<Student *> *studentArr = [CoreManagerInstance.managerContenxt executeFetchRequest:request error:nil];
    //5.删除数据
    for (Student *student in studentArr) {
        [CoreManagerInstance.managerContenxt deleteObject:student];
    }
    //6.同步到数据库
    [CoreManagerInstance save];
}

/// 删除全部.
+ (void)deleteAll {
    NSBatchDeleteRequest *batchRequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest:[[NSFetchRequest alloc] initWithEntityName:@"Student"]];
    //执行批量删除文件的请求
    [CoreManagerInstance.maagerDinator executeRequest:batchRequest withContext:CoreManagerInstance.managerContenxt error:nil];
}


/// 根据用户名字修改年龄.
+ (void)modifyName:(NSString *)name foundationAge:(int)age {
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    //2.创建查询谓词(查询条件)
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",name];
    // 3.给查询请求设置谓词
    request.predicate = predicate;
    //4.查询数据
    NSArray<Student *> *studentArr = [CoreManagerInstance.managerContenxt executeFetchRequest:request error:nil];
    for (Student *student in studentArr) {
        student.age = age;
    }
    //6.同步到数据库
    [CoreManagerInstance save];
}

/// 查 根据性别查询.
+ (NSArray<Student*> *)queryFoundationSex:(int)sex {
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    //2.创建查询谓词(查询条件)
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sex = %d",sex];
    // 3.给查询请求设置谓词
    request.predicate = predicate;
    
    NSArray<Student *> *studentArr = [CoreManagerInstance.managerContenxt executeFetchRequest:request error:nil];
    return studentArr;
}

+ (NSArray<Student*> *)queryAll {
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    //2.创建查询谓词(查询条件)
//    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sex = %d",sex];
//    // 3.给查询请求设置谓词
//    request.predicate = predicate;
    
    NSArray<Student *> *studentArr = [CoreManagerInstance.managerContenxt executeFetchRequest:request error:nil];
    return studentArr;
}


@end

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值