美文网首页
iOS 实现本地草稿功能 runtime实现归档解档

iOS 实现本地草稿功能 runtime实现归档解档

作者: JohnayXiao | 来源:发表于2019-07-08 09:40 被阅读0次

文件1

//
//  XJDraftArchiver.h
//  tech2real
//
//  Created by Johnay  on 17/12/25.
//  Copyright © 2017年 SZUI. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface XJDraftArchiver : NSObject

/**
*  单例
*
*  @return 返回单例对象
*/
+ (instancetype)sharedClient;

/**
*  对数据进行归档
*
*  @param dataArray 需要进行归档的数据
*/
-(void)setArchiverDataWithData:(NSMutableArray *)dataArray;

/**
*  获取解归档的数据
*
*  @return 解归档后的数组
*/
-(NSMutableArray*)getArchiverData;

/**
*  获取文件路径
*
*  @return 返回文件路径
*/
-(NSString *)getAllFilePath;

@end

//
//  XJDraftArchiver.m
//  tech2real
//
//  Created by Johnay  on 17/12/25.
//  Copyright © 2017年 SZUI. All rights reserved.
//

#import "XJDraftArchiver.h"
/**
 *  文件后缀名
 */
NSString *const kFileDefaultPathExtension = @"cache";
/**
 *  默认文件名
 */
NSString *kFileDefaultFileName = @"defaultFile";
@interface XJDraftArchiver ()

@end
@implementation XJDraftArchiver

/**
 *  单例
 *
 *  @return 返回单例对象
 */
+ (instancetype)sharedClient
{
    static XJDraftArchiver *client = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        client = [[XJDraftArchiver alloc]init];
    });
    //    kFileDefaultFileName = [[NSUserDefaults standardUserDefaults]valueForKey:isLoginStatus]?[[NSUserDefaults standardUserDefaults]valueForKey:PHONE]:@"defaultFile";
    return client;
}

/**
 *  对数据进行归档
 *
 *  @param dataArray 需要进行归档的数据
 */
-(void)setArchiverDataWithData:(NSMutableArray *)dataArray
{
    NSString *fileAllPath = [self getAllFilePath];
    if([[NSFileManager defaultManager] fileExistsAtPath:fileAllPath]) {//先将该地址存在的文件删除,再存储。
        NSError *error    = nil;
        if(![[NSFileManager defaultManager] removeItemAtPath:fileAllPath error:&error]) {
            NSLog(@"Cannot remove file: %@", error);
        }
    }
    [NSKeyedArchiver archiveRootObject:dataArray toFile:fileAllPath];
}

/**
 *  获取解归档的数据
 *
 *  @return 解归档后的数组
 */
-(NSMutableArray*)getArchiverData
{
    NSString *fileAllPath = [self getAllFilePath];
    NSMutableArray *newDataArray = [NSKeyedUnarchiver unarchiveObjectWithFile:fileAllPath];
    return newDataArray;
}

/**
 *  获取文件路径
 *
 *  @return 返回文件路径
 */
-(NSString *)getAllFilePath
{
    NSString *paths = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *fileAllPath = [[paths stringByAppendingPathComponent:kFileDefaultFileName] stringByAppendingPathExtension:kFileDefaultPathExtension];
    return fileAllPath;
}

@end

文件2

//
//  XJDraftModel.h
//  tech2real
//
//  Created by Johnay  on 17/12/22.
//  Copyright © 2017年 SZUI. All rights reserved.
//

#import "HPBaseModel.h"
#import "TZAssetModel.h"
@interface XJDraftModel : HPBaseModel<NSCoding>

@property (nonatomic, copy) NSString *titleText;

@property (nonatomic, copy) NSString *createTime;
@property (nonatomic, copy) NSString *contentText;

//@property (nonatomic,strong)NSMutableArray *picArrs;
//@property (nonatomic, strong)NSMutableArray<TZAssetModel *> *selectedAssets;
@property (nonatomic, strong)NSMutableArray *selectedPhotos;

@property (nonatomic, copy) NSString *shareFlag;

@property (nonatomic, copy) NSString *logoUrl;
@property (nonatomic, copy) NSString *shareTitle;

@property (nonatomic, copy) NSString *shareType;
@property (nonatomic, copy) NSString *shareContent;

@property (nonatomic, copy) NSString *clubImgName;
@property (nonatomic, copy) NSString *clubName;
@property (nonatomic, copy) NSString *clubID;

@end
//
//  XJDraftModel.m
//  tech2real
//
//  Created by Johnay  on 17/12/22.
//  Copyright © 2017年 SZUI. All rights reserved.
//

#import "XJDraftModel.h"
#import <objc/runtime.h>

@implementation XJDraftModel

- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    
    
}

#pragma mark - 归档
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    unsigned int outCount = 0;
    Ivar *ivars = class_copyIvarList([self class], &outCount);
    
    for (unsigned int i = 0; i<outCount; i++) {
        
        Ivar ivar = ivars[i];
        NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
        id value = [self valueForKey:key];
        [aCoder encodeObject:value forKey:key];
    }
    free(ivars);
}
#pragma mark - 解归档
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        
        unsigned int OutCount = 0;
        Ivar *ivars = class_copyIvarList([self class], &OutCount);
        
        for (unsigned int i=0; i<OutCount; i++) {
            
            Ivar ivar = ivars[i];
            NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
            [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
        }
        free(ivars);
    }
    return self;
}
@end

相关文章

网友评论

      本文标题:iOS 实现本地草稿功能 runtime实现归档解档

      本文链接:https://www.haomeiwen.com/subject/vqynhctx.html