iOS数据库离线缓存思路和网络层封装——数据缓存操作封装

本文介绍如何在iOS应用中实现数据库离线缓存,并提供了FMDB和LKDBHelper两个第三方库的使用说明,包括头文件和实现文件的引入,帮助理解数据缓存操作的封装过程。

使用说明

 1关联第三方库

 1-1 FMDB

 1-2 LKDBHelper


.h文件

#import <Foundation/Foundation.h>
#import "LKDBHelper.h"

@interface SYFMDBManager : NSObject

/// 单例
+ (SYFMDBManager *)shareFMDB;

#pragma mark - 表操作

/// 创建表
- (void)createTable:(Class)modelClass;

/// 删除表
- (void)dropTable:(Class)modelClass;

/// 删除所有表
- (void)dropAllTable;

#pragma mark - 数据操作

/// 保存数据(异步)
- (void)saveDataWithData:(NSObject *)model;
/// 保存数据(区分同步,或异步)
- (void)saveDataWithData:(NSObject *)model synchronously:(BOOL)isSynchronously;

/// 获取所有数据
- (NSArray *)getAllDataWithClass:(Class)modelClass;

/// 删除数据
- (void)deleteDataWithData:(NSObject *)model;

/// 删除所有数据
- (void)deleteAllData;
/// 删除所有数据,删除成功后回调
- (void)deleteAllData:(void (^)(void))completedBlock;

@end


.m文件

#import "SYFMDBManager.h"

static NSString *const dataName =@"SYFMDB.db";

@interface SYFMDBManager ()

@property (nonatomic,strong) NSString *dataPath;    // 数据库文件目录
@property (nonatomic,strong) LKDBHelper *dataHelper;// 数据库

@end

@implementation SYFMDBManager

#pragma mark - 实例化

- (instancetype)init
{
    self = [superinit];
    if (self)
    {
//        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//        // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//        NSString *documentDirectory = [paths objectAtIndex:0];
//        self.dataPath = [documentDirectory stringByAppendingPathComponent:dataName];
        
        // 区分每个用户数据库
        NSString *userId =@"";
        NSString *userDBName = [NSStringstringWithFormat:@"%@%@", userId,dataName];
        self.dataHelper = [[LKDBHelperalloc] initWithDBName:userDBName];
    }
    
    return self;
}

- (void)dealloc
{
    self.dataPath =nil;
    self.dataHelper =nil;
}

/// 单例
+ (SYFMDBManager *)shareFMDB
{
    static SYFMDBManager *sharedManager;
    static dispatch_once_t onceToken;
    
    dispatch_once(&onceToken, ^{
        sharedManager = [[selfalloc] init];
        assert(sharedManager !=nil);
    });
    
    return sharedManager;
}

#pragma mark - 表操作

// 创建表
- (void)createTable:(Class)modelClass
{
    if (modelClass)
    {
//        BOOL isResult = [self.dataHelper getTableCreatedWithClass:modelClass];
        BOOL isResult = [self.dataHelpercreateTableWithModelClass:modelClass];
        
        NSString *resultStr = [NSStringstringWithFormat:@"创建表(%@)%@",NSStringFromClass(modelClass), (isResult ?@"成功" :@"失败")];
        NSLog(@"%@", resultStr);
    }
}

// 删除表
- (void)dropTable:(Class)modelClass
{
    if (modelClass)
    {
        BOOL isResult = [self.dataHelperdropTableWithClass:modelClass];
        
        NSString *resultStr = [NSStringstringWithFormat:@"删除表(%@)%@",NSStringFromClass(modelClass), (isResult ?@"成功" :@"失败")];
        NSLog(@"%@", resultStr);
    }
}

// 删除所有表
- (void)dropAllTable
{
    [self.dataHelperdropAllTable];
}

#pragma mark - 数据操作

// 保存数据(异步)
- (void)saveDataWithData:(NSObject *)model
{
    [self saveDataWithData:modelsynchronously:NO];
}

/// 保存数据(区分同步,或异步)
- (void)saveDataWithData:(NSObject *)model synchronously:(BOOL)isSynchronously
{
    if (model)
    {
        if (isSynchronously)
        {
            // 同步
            // 先删除,后保存
            [self deleteDataWithData:model];
            BOOL isResult = [self.dataHelperinsertWhenNotExists:model];
            NSString *resultStr = [NSStringstringWithFormat:@"同步保存数据%@", (isResult ?@"成功" :@"失败")];
            NSLog(@"%@", resultStr);
        }
        else
        {
            // 异步
            [self.dataHelperinsertToDB:model callback:^(BOOL result) {
                BOOL isResult = result >0;
                NSString *resultStr = [NSStringstringWithFormat:@"异步保存数据%@", (isResult ?@"成功" :@"失败")];
                NSLog(@"%@", resultStr);
            }];
        }
    }
}

// 获取所有数据
- (NSArray *)getAllDataWithClass:(Class)modelClass
{
    if (modelClass)
    {
        NSMutableArray *array = [self.dataHelpersearch:modelClass where:nilorderBy:niloffset:0count:1000];
        return array;
    }
    
    return nil;
}

// 删除数据
- (void)deleteDataWithData:(NSObject *)model
{
    if (model)
    {
        BOOL isExit = [self.dataHelperisExistsModel:model];
        if (isExit)
        {
            BOOL isResult = [self.dataHelperdeleteToDB:model];
            
            NSString *resultStr = [NSStringstringWithFormat:@"删除数据%@", (isResult ?@"成功" :@"失败")];
            NSLog(@"%@", resultStr);
        }
        else
        {
            NSLog(@"删除数据失败-数据不存在");
        }
    }
}

// 删除所有数据
- (void)deleteAllData
{
    BOOL isResult = [self.dataHelperdeleteToDB];
    
    NSString *resultStr = [NSStringstringWithFormat:@"删除所有数据%@", (isResult ?@"成功" :@"失败")];
    NSLog(@"%@", resultStr);
}

// 删除所有数据,删除成功后回调
- (void)deleteAllData:(void (^)(void))completedBlock
{
    BOOL isResult = [self.dataHelperdeleteToDB];
    
    NSString *resultStr = [NSStringstringWithFormat:@"删除所有数据%@", (isResult ?@"成功" :@"失败")];
    NSLog(@"%@", resultStr);
    
    if (completedBlock)
    {
        completedBlock();
    }
}

@end






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值