.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