一:歸檔與解檔
(1::::::)歸檔
1:保存數據到模型類,如下:
- (instancetype)initWithDic:(NSDictionary*)dic
{
self = [superinit];
if (self) {
//
//轉模型
for (NSString* keyin [selfgetAllPRopertys]) {
//
NSArray* tmparr = [keycomponentsSeparatedByString:@"p_"];
NSString* tmpkey =tmparr.lastObject;
id propertyValue = [dicvalueForKey:tmpkey];
[selfsetValue:[LSFactoryfc_judgeObj:propertyValueplaceholder:@""]forKey:key];
}
//
}
returnself;
}
2:將該模型類歸檔+(void)fc_setValueModel:(YHBaseModel *)model ForKey:(NSString *)key{
NSMutableData * data = [[NSMutableDataalloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
[archiver encodeObject:modelforKey:key];
[archiver finishEncoding];
[selffc_writeCecheFile:data withFileID:key];
}
3:將歸檔后的數據寫進本地緩存
+(void)fc_writeCecheFile:(NSData *)data
withFileID:(NSString *)fileID{
NSString* path = [NSHomeDirectory()stringByAppendingString:kLS_BASE_CECHE_PATH_Archiver];
NSFileManager * fileManager = [NSFileManagerdefaultManager];
//判斷目錄是否存在
if (![fileManagerfileExistsAtPath:cechePath]) {
//創建目錄
[fileManager createDirectoryAtPath:cechePathwithIntermediateDirectories:YESattributes:nilerror:nil];
}
//拼接文件路徑
NSMutableString * tempStr = [[NSMutableStringalloc]init];
for (int i=0; i<fileID.length; i++) {
if (([fileIDcharacterAtIndex:i]<='9'&&[fileIDcharacterAtIndex:i]>='0')||([fileIDcharacterAtIndex:i]<='z'&&[fileIDcharacterAtIndex:i]>='a')||([fileIDcharacterAtIndex:i]<='Z'&&[fileIDcharacterAtIndex:i]>='A')) {
[tempStr appendFormat:@"%c",[fileIDcharacterAtIndex:i]];
}
}
NSString * writePath = [cechePathstringByAppendingFormat:@"/%@",tempStr];
[data writeToFile:writePathatomically:YES];
// NSLog(@"寫緩存");
}
#pra mark -獲取說有的成員變量
-(NSArray *)getAllPropertys{
NSMutableArray * array = [[NSMutableArrayalloc]init];
unsignedint * count = malloc(sizeof(unsignedint));
//調用runtime的方法
//Ivar:方法返回的對象內容對象,這里將返回一個Ivar類型的指針
//class_copyIvarList方法可以捕獲到類的所有變量,將變量的數量存在一個unsigned int的指針中
Ivar * mem =class_copyIvarList([selfclass], count);
//進行遍歷
for (int i=0; i< *count ; i++) {
//通過移動指針進行遍歷
Ivar var = * (mem+i);
//獲取變量的名稱
constchar * name = ivar_getName(var);
NSString * str = [NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
[array addObject:str];
}
//釋放內存
free(count);
//注意處理野指針
count=nil;
return array;
}
2:(接檔)
1.根據路徑先找data
+(NSData *)fc_readCecheFile:(NSString *)fileID fromPath:(NSString*)cechePath{
NSMutableString * tempStr = [[NSMutableStringalloc]init];
for (int i=0; i<fileID.length; i++) {
if (([fileIDcharacterAtIndex:i]<='9'&&[fileIDcharacterAtIndex:i]>='0')||([fileIDcharacterAtIndex:i]<='z'&&[fileIDcharacterAtIndex:i]>='a')||([fileIDcharacterAtIndex:i]<='Z'&&[fileIDcharacterAtIndex:i]>='A')) {
[tempStr appendFormat:@"%c",[fileIDcharacterAtIndex:i]];
}
}
NSString * readPath = [cechePathstringByAppendingFormat:@"/%@",tempStr];
NSFileManager * fileManager = [NSFileManagerdefaultManager];
//判斷文件是否
if (![fileManagerfileExistsAtPath:readPath]) {
returnnil;
}else{
NSData *data = [NSDatadataWithContentsOfFile:readPath];
return data;
}
}
2.找到data 之后開始接檔,創建數據模型類
+(YHBaseModel *)fc_getValueModel:(NSString *)key{
NSString* path = [NSHomeDirectory()stringByAppendingString:kLS_BASE_CECHE_PATH_Archiver];
NSData * data = [selffc_readCecheFile:key fromPath:path];
NSKeyedUnarchiver * unArchiver = [[NSKeyedUnarchiveralloc]initForReadingWithData:data];
YHBaseModel * model = [unArchiverdecodeObjectForKey:key];
[unArchiver finishDecoding];
return model;
}
新聞熱點
疑難解答