关于iOS GYDataCenter本地数据库解决方案的那些事儿--上卷

       之前提到到前端处理数据线程的解决方案,这里有需要到数据的本地存储,数据持久最好的方式首选数据库。那现在在我们的面前的有两种选择,一种是apple的coredata,另外一种就是采用FMDB。我的主观反应是,我首推的是FMDB,FMDB的灵活性能更强,适用于多种场景,在数据处理上,可以通过选择不同的SQL语句,达到更好的效果。在FMDB的基础上,还有一个更便利的框架--GYDataCenter。

这里就从一个比较完整的数据模型的创建来讲解着一个解决方案。

这个解决方案大体上分为:数据模型(数据表),数据操作(逻辑运算)和数据迁移,其实就是数据的增删查改,对于不是很了解的SQL语句的开发者来说,这个在方便不过了,在下面的内容里面也穿插讲解一下MD5和基础用户存储的一些解决方案。

主要内容:

1.用户的概念
2.如何创建一个数据库和库表
3.如何进行增删查改

本文主要讲解1 、 2两个点。

1.用户的概念

      首先,我们必须明白有用户群体就拥有商机,我在给一些项目做维护的时候,很多开发者喜欢用  NSUserDefaults 去存储一些用户或者登录者的基本信息,甚至去存储支付类的私钥或者公钥。个人不是很提倡使用这个种方法,一方面考虑到安全性的问题,一方面代码要写得高大上一丢丢。
   Apple提供了一个加密类给开发者提供-- NSKeyedArchiver 其实就是一个归档的过程,保存用户信息就是创建一个档案,很多开发者觉得这个类用起来比较麻烦,所以很多人都不忽略它的存在。
   我们来看看这个类到底怎么用,我们创建一个user基础信息的模型,从网络请求回来的数据转换成模型就比较容易操作了,这个是时候,一般用户的基本信息都是不作修改的,所以在创建的时候我们可以将用户的属性设置成 readonly(只是建议需要根据实际的情况去决定)
创建一个QYJUserInfo的model,在.h文件里面去定义需要的字段。
#import <Foundation/Foundation.h>

@interface QYJUserInfo : NSObject <NSCopying>
{
    NSString *_id;
}

/**
 * 账号
 */
@property (nonatomic, copy) NSString *username;

/**
 * 密码
 */
@property (nonatomic, copy) NSString *password;

/**
 * 邮箱
 */
@property (nonatomic, copy) NSString *email;

/**
 * 删除标识,未删:0,已删:1
 */
@property (nonatomic, copy) NSString *deleted;

/**
 * 用户ID
 */
@property (nonatomic, copy) NSString *userID;

/**
 * 中文名
 */
@property (nonatomic, copy) NSString *cname;

/**
 * 联系手机号码
 */
@property (nonatomic, copy) NSString *phone;

/**
 * 用户类型
 */
@property (nonatomic, copy) NSString *type;

/**
 * 英文名
 */
@property (nonatomic, copy) NSString *ename;


/**
 * 创建时间
 */
@property (nonatomic, copy) NSString *created_dt;

/**
 * 更新时间
 */
@property (nonatomic, copy) NSString *updated_dt;

/**
 * 基础方法
 */

/*
 @method toModelWithDictionary:
 @abstrac 字典转模型,用户类型一般只处理一个
 @discussion 字典转模型
 @param dict (NSDictionary *)
 @result QYJUserInfo 对象
 */
+ (instancetype)toModelWithDictionary:(NSDictionary *)dict;

/*
 @method toDictionary
 @abstrac 转字典
 @discussion 转字典
 @param No param
 @result NSDictionary
 */
- (NSDictionary *)toDictionary;

/*
 @method getMD5
 @abstrac 将对象的值和属性名转成字符串MD5
 @discussion 将对象的值和属性名转成字符串MD5
 @param No param
 @result NSString
 */
- (NSString *)getMD5;

/*
 @method saveObjectToLocal
 @abstrac 保存对象到本地
 @discussion 保存对象到本地
 @param No param
 @result BOOL 保存结果
 */
- (BOOL)saveObjectToLocal;

/*
 @method localUserInfo:
 @abstrac 查询本地用户信息,一般做自动登录的用户只允许有一个
 @discussion 查询本地用户信息
 @param No param
 @result QYJUserInfo对象
 */
+ (instancetype)localUserInfo;

/*
 @method deleteUserInfo:
 @abstrac 删除本地存储的用户数据,在用户点击出按钮的时候调用
 @discussion 删除本地存储的用户数据,在用户点击出按钮的时候调用
 @param No param
 @result No return
 */
+ (void)deleteUserInfo;

/*
 @method compare:
 @abstrac 比较大小
 @discussion 比较大小
 @param QYJUserInfo对象
 @result NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending
 */
- (NSComparisonResult)compare:(QYJUserInfo *)otherObject;

@end

      在.m的文件中我们要去实现我们声明的文件。

#import "QYJUserInfo.h"
//runtime 需要引用的头文件
#import <objc/runtime.h>
#import "NSString+MD5.h"

// 保存的Key 
static NSString *const localSaveKey = @"com.userInfo.qyj";

@implementation QYJUserInfo

@synthesize userID = _id;

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {
    Class modelClass = [self class];
    QYJUserInfo *object = [[modelClass alloc] init];
    
    NSArray *propertyName = [modelClass getPropertyNames];
    NSLog(@"%@", propertyName);
    for (NSString *property in propertyName) {
        [object setValue:[self valueForKey:property] forKey:property];
    }
    
    return object;
}

+ (NSArray *)getPropertyNames {
    NSMutableArray *names = @[].mutableCopy;
    u_int count;
    objc_property_t *properties  = class_copyPropertyList(self, &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值