iOS CoreData(一)

一.CoreData主要的幾個(gè)類

NSManagedObjectContext
托管對象上下文,進(jìn)行數(shù)據(jù)操作時(shí)大多都是和這個(gè)類打交道。
NSManagedObjectModel
托管對象模型,一個(gè)托管對象模型關(guān)聯(lián)一個(gè)模型文件(.xcdatamodeld),存儲著數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)。
NSPersistentStoreCoordinator
持久化存儲協(xié)調(diào)器,負(fù)責(zé)協(xié)調(diào)存儲區(qū)和上下文之間的關(guān)系。
NSManagedObject
托管對象類,所有CoreData中的托管對象都必須繼承自當(dāng)前類,根據(jù)實(shí)體創(chuàng)建托管對象類文件。

二.寫一個(gè)manage管理類

頭文件

@interface QBZCoreDataManage : NSObject
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

+(instancetype)sharedInstance;

//增刪改查
//增
- (id)insertObject:(NSString *)type;
//刪
- (void)deleteObject:(NSString *)type predicate:(NSPredicate *)predicate;
//改
- (id)changeObject:(NSString *)type predicate:(NSPredicate *)predicate;
//查
- (id)searchObject:(NSString *)type predicate:(NSPredicate *)predicate;

//保存
- (void)saveContext;
@end

實(shí)現(xiàn)

+ (instancetype)sharedInstance
{
    static id instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
        [instance managedObjectContext];
    });
    return instance;
}

- (NSManagedObjectContext *)managedObjectContext
{
    if(!managedObjectContext)
    {
        managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
    }
    return managedObjectContext;
}


- (NSManagedObjectModel *)managedObjectModel
{
    if(managedObjectModel == nil){
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"QBZCoreData" withExtension:@"momd"];
        managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
        
    }
    return managedObjectModel;
}


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if(!persistentStoreCoordinator)
    {
        persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
        NSString *dataPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
        dataPath = [dataPath stringByAppendingFormat:@"/%@.sqlite", @"QBZCoreData"];
        NSLog(@"%@",dataPath);
//        NSDictionary *options = {};
        [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dataPath] options:nil error:nil];
    }
    return persistentStoreCoordinator;
}


- (id)insertObject:(NSString *)type
{
    id some = [NSEntityDescription insertNewObjectForEntityForName:type inManagedObjectContext:[QBZCoreDataManage sharedInstance].managedObjectContext];
    return some;

}
- (void)deleteObject:(NSString *)type predicate:(NSPredicate *)predicate
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:type];
    request.predicate = predicate;
    NSError *error;
    NSArray *reqestArray = [[QBZCoreDataManage sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
    [reqestArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [[QBZCoreDataManage sharedInstance].managedObjectContext deleteObject:obj];
    }];
}

//改
- (id)changeObject:(NSString *)type predicate:(NSPredicate *)predicate
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:type];
    request.predicate = predicate;
    NSError *error;
    NSArray *resultArray = [[QBZCoreDataManage sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
    if(resultArray.count>0){
        return resultArray[0];
    }
    return nil;
}
//查
- (id)searchObject:(NSString *)type predicate:(NSPredicate *)predicate
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:type];
    request.predicate = predicate;
    NSError *error;
    NSArray *resultArray = [[QBZCoreDataManage sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
    return resultArray;

}

- (void)saveContext
{
    NSError *error;
    if ([QBZCoreDataManage sharedInstance].managedObjectContext.hasChanges) {
        [[QBZCoreDataManage sharedInstance].managedObjectContext save:&error];
    }
    
    if(error)
    {
        NSLog(@"CoreData save error:%@",error);
    }

}
@end

其他方法見demo

終端調(diào)試

配置

終端
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CoreData簡述 CoreData是ios系統(tǒng)推薦給我們的數(shù)據(jù)存儲方案。在ios中數(shù)據(jù)存儲有多種方式,包括NS...
    刀客傳奇閱讀 4,046評論 4 12
  • Core Data是iOS5之后才出現(xiàn)的一個(gè)框架,提供了直接使用SQLite數(shù)據(jù)庫的大部分靈活性,它提供了對象-關(guān)...
    且行且珍惜_iOS閱讀 42,815評論 17 142
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請注明:劉小壯[http://www.itdecent.cn/u/2de707c93d...
    劉小壯閱讀 20,078評論 17 149
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請注明:劉小壯[http://www.itdecent.cn/u/2de707c93d...
    劉小壯閱讀 27,422評論 75 85
  • 因?yàn)橛鲆?,我學(xué)會感恩; 因?yàn)橛鲆姡覍W(xué)會付出; 因?yàn)橛鲆?,我學(xué)會勇敢; 因?yàn)橛鲆姡覔碛凶杂桑?因?yàn)橛鲆?,我獲得美...
    自由的花園閱讀 122評論 0 2

友情鏈接更多精彩內(nèi)容