#import "DataBaseManager.h"
static DataBaseManager *instance = nil;
@implementation DataBaseManager
+ (DataBaseManager *)sharedManager
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[DataBaseManager alloc] init];
[instance openDB];
});
return instance;
}
//Core Data
//1.构建模型文件
//2.创建ManagedObject子类
//3.打开数据库文件
//4.操作数据库
- (void)openDB
{
//(1)加载数据模型文件
NSURL *url = [[NSBundle mainBundle] URLForResource:@"UserDataModel" withExtension:@"momd"];
NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
//(2)使用coordinator协调器打开数据文件
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:dataModel];
NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/UserDataModel.sqlite"];
NSURL *dbURL = [NSURL fileURLWithPath:filePath];
NSError *error = nil;
[psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:dbURL
options:nil
error:&error];
if (error) {
NSLog(@"打开数据库失败 %@", error);
} else {
NSLog(@"打开成功");
}
//(3)创建context对象
self.context = [[NSManagedObjectContext alloc] init];
self.context.persistentStoreCoordinator = psc;
}
//创建一个mo对象
- (NSManagedObject *)createMO:(NSString *)entityName
{
if (entityName.length == 0) {
return nil;
}
NSManagedObject *mo = [NSEntityDescription insertNewObjectForEntityForName:entityName
inManagedObjectContext:self.context];
return mo;
}
//把一条对象的信息加入到数据库中
- (void)addManagedObject:(NSManagedObject *)object
{
[self.context insertObject:object];
NSError *error = nil;
[self.context save:&error];
NSLog(@"error : %@", error);
}
//删除
- (void)deleteManagedObjectForEntityName:(NSString *)entityName withPredicate:(NSPredicate *)predicate
{
//查询到要删除的对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
request.predicate = predicate;
NSArray *array = [self.context executeFetchRequest:request error:nil];
for (NSManagedObject *mo in array) {
[self.context deleteObject:mo];
}
[self.context save:nil];
}
//查询
- (NSArray *)query:(NSString *)entityName
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
NSArray *results = [self.context executeFetchRequest:request error:nil];
return results;
}
@end