【開發工具】YTKKeyValueStore 鍵值存儲--存儲自定義類型

1,使用 'MJExtension' 處理字典和模型。

注意:自定義類型中包含自定義類型,需要實現 + (NSDictionary *)mj_objectClassInArray 方法
@class Person;
@interface Group : NSObject
@property (nonatomic, strong) NSString *groupName;
@property (nonatomic, strong) NSArray<Person *> *members;
@property (nonatomic, strong) NSArray<Person *> *teachers;
@end

@implementation Group
+ (NSDictionary *)mj_objectClassInArray{
    return @{
             @"members": @"Person",
             @"teachers": [Person class]
             };
}
@end

2,YTKKeyValueStore 可以對系統類型的數據進行存儲,對于自定義類型,將自定義類型處理成Json數據再進行存儲即可。

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

@interface YTKKeyValueStore (CustomObject)

/******** 自定義類型相關 *********************************************************/
/** 存儲自定義類型 */
- (void)putCustomObject:(id)object
                 withId:(NSString *)objectId
              intoTable:(NSString *)tableName;

/** 存儲包含自定義類型的數組 */
- (void)putArrWithCustomClass:(Class)aclass
                       object:(id)object
                       withId:(NSString *)objectId
                    intoTable:(NSString *)tableName;

/** 獲取自定義類型的對象方法 */
- (id)getCustomClass:(Class)aclass
          objectById:(NSString *)objectId
           fromTable:(NSString *)tableName;

@end

@interface AGKeyValueManage : NSObject

+ (void)storeWithDBName:(NSString *)dbName tableName:(NSString *)tableName handle:(void (^)(YTKKeyValueStore *store, NSString *tableName))handle;

@end
#import "AGKeyValueManage.h"
#import "MJExtension.h"

@implementation YTKKeyValueStore (CustomObject)

- (void)putCustomObject:(id)object withId:(NSString *)objectId intoTable:(NSString *)tableName{
    NSDictionary *dic = [object mj_keyValues];
    [self putObject:dic withId:objectId intoTable:tableName];
}

/**
    將包含自定義對象的數組轉成包含
 */
- (void)putArrWithCustomClass:(Class)aclass object:(id)object withId:(NSString *)objectId intoTable:(NSString *)tableName{
    NSArray *dicArr = [aclass mj_keyValuesArrayWithObjectArray:object];
    [self putObject:dicArr withId:objectId intoTable:tableName];
}

- (id)getCustomClass:(Class)aclass objectById:(NSString *)objectId fromTable:(NSString *)tableName{
    id object = [self getObjectById:objectId fromTable:tableName];
    id result;
    if ([object isKindOfClass:[NSArray class]]) {
        result = [aclass mj_objectArrayWithKeyValuesArray:object];
    }
    else{
        result = [aclass mj_objectWithKeyValues:object];
    }
    return result;
}
@end

@implementation AGKeyValueManage

+ (void)storeWithDBName:(NSString *)dbName tableName:(NSString *)tableName handle:(void (^)(YTKKeyValueStore *store, NSString *tableName))handle{
    if (!handle) {
        return;
    }
    YTKKeyValueStore *store = [[YTKKeyValueStore alloc] initDBWithName:dbName];
    [store createTableWithName:tableName];
    handle(store, tableName);
}
@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,924評論 18 139
  • 五代時期的后周國祚雖然短暫,但出現了兩個雄才大略的皇帝,他們分別是周太祖郭威和周世宗柴榮,可惜這兩位皇帝都英年早逝...
    碩鼠無止閱讀 807評論 1 7
  • 《面包樹上的女人》講述的一個女人從少女時代到女人的愛情經歷,起初愛上一位才子,才子答應她每年給她寫一首歌,但因為才...
    cb01beb04684閱讀 841評論 0 0
  • 禁錮 南方小城、淅淅瀝瀝的小雨打濕了所有心緒、周圍嘈雜混亂、廣場舞的音樂在沉郁的城市上空盤旋、像一場沒有回響的控訴...
    貓不懂寂寞閱讀 131評論 0 0