国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

數據存儲方式IOS---歸檔與解檔

2019-11-06 09:57:57
字體:
來源:轉載
供稿:網友

一:歸檔與解檔

(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;

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 张家川| 章丘市| 高台县| 敦化市| 贵溪市| 冷水江市| 桂平市| 岑巩县| 郎溪县| 长武县| 赤壁市| 阿拉尔市| 望谟县| 称多县| 日喀则市| 布尔津县| 固安县| 滦平县| 奇台县| 灵山县| 和林格尔县| 朝阳市| 珲春市| 潮州市| 巴林右旗| 聂拉木县| 连山| 中卫市| 广宁县| 安泽县| 临江市| 齐河县| 诸城市| 长治县| 象州县| 红安县| 集安市| 沙洋县| 新乐市| 康平县| 诸暨市|