iOS CoreData 使用

CoreData是iOS5之后才出現(xiàn)的一個框架,提供了直接使用SQLite數(shù)據(jù)庫的大部分靈活性,它提供了對象-關(guān)系映射(ORM)的功能,即能夠?qū)C對象轉(zhuǎn)化成數(shù)據(jù),保存在SQLite數(shù)據(jù)庫文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫中的數(shù)據(jù)還原成OC對象,通過CoreData管理應(yīng)用程序的數(shù)據(jù)模型,可以極大程度減少需要編寫的代碼數(shù)量!

CoreData的簡單封裝(增、刪、改、查)


獲取上下文

#pragma mark - Getter
- (NSManagedObjectContext *)context{
    if (!_context){
        AppDelegate *delegate = (AppDelegate *)UIApplication.sharedApplication.delegate;
        _context = delegate.persistentContainer.viewContext;
    }
    return _context;
}

1.添加數(shù)據(jù)

pragma mark - 添加數(shù)據(jù)
- (BOOL)insertWithTableName:(NSString *)tableName propertits:(NSDictionary *)propertits{
    NSManagedObject *entity = [NSEntityDescription insertNewObjectForEntityForName:tableName inManagedObjectContext:self.context];
    for (NSString *key in propertits.allKeys) {
        id value = [propertits objectForKey:key];
        [entity setValue: value forKey:key];
    }
    NSError *error = nil;
    if (![self.context save:&error]){
        NSLog(@"%@",error);
        return false;
    }else{
        return true;
    }
}


2.刪除數(shù)據(jù)

#pragma mark - 刪除數(shù)據(jù)
- (BOOL)deleteWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate{
    NSError *error = nil;
    NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
    fetchRequst.predicate = predicate;

    NSMutableArray *result = [[self.context executeFetchRequest:fetchRequst error:&error] mutableCopy];
    for (id obj in result) {
        [self.context deleteObject:obj];
    }
    if (![self.context save:&error]){
        NSLog(@"%@",error);
        return false;
    }else{
        return true;
    }
}
- (BOOL)deleteWithTableName:(NSString *)tableName{
    return [self deleteWithTableName:tableName predicate:nil];
}


3.修改數(shù)據(jù)


#pragma mark - 修改數(shù)據(jù)
- (BOOL)modifyWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate properties:(NSDictionary *)propertites{
    NSError *error = nil;
    NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
    fetchRequst.predicate = predicate;
    NSMutableArray *result = [[self.context executeFetchRequest:fetchRequst error:&error] mutableCopy];
    for (id obj in result) {
        for (NSString *key in propertites.allKeys) {
            id value = [propertites objectForKey:key];
            [obj setValue:value forKey:key];
        }
    }
    if (![self.context save:&error]){
        NSLog(@"%@",error);
        return false;
    }else{
        return true;
    }
}


4.查詢數(shù)據(jù) <異步和同步查詢>

#pragma mark - 查詢數(shù)據(jù)
- (void)queryAsyncWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate sort:(NSSortDescriptor *)sort fetchResultHandler:(FetchResultHandlder)handler{
    
    NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
    
    if (sort.key != nil){
        fetchRequst.sortDescriptors = @[sort];
    }
    NSAsynchronousFetchRequest *asyncFetchRequst = [[NSAsynchronousFetchRequest alloc]initWithFetchRequest:fetchRequst completionBlock:^(NSAsynchronousFetchResult * result) {
        NSArray *rst = result.finalResult;
        handler(rst);
    }];
    
    NSError *error = nil;
    if (![self.context executeRequest:asyncFetchRequst error:&error]){
        NSLog(@"%@",error);
    }
}
- (void)queryAsyncWithTableName:(NSString *)tableName fetchResultHandler:(FetchResultHandlder)handler{
    [self queryAsyncWithTableName:tableName predicate:nil sort:[[NSSortDescriptor alloc]init] fetchResultHandler:handler];
}

- (void)querySyncWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate sort:(NSSortDescriptor *)sort fetchResultHandler:(FetchResultHandlder)handler{
    
    NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
    
    fetchRequst.predicate = predicate;
    
    if (sort.key != nil){
        fetchRequst.sortDescriptors = @[sort];
    }
    
    NSError *error = nil;
    NSArray * result = [self.context executeFetchRequest:fetchRequst error:&error];
    if (![self.context save:&error]){
        NSLog(@"%@",error);
    }
    handler(result);
}

- (void)querySyncWithTableName:(NSString *)tableName fetchResultHandler:(FetchResultHandlder)handler{
    [self querySyncWithTableName:tableName predicate:nil sort:[[NSSortDescriptor alloc]init] fetchResultHandler:handler];
}

參考:
http://www.itdecent.cn/p/332cba029b95

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

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

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