AutoEncodeDecode 1.0.3

AutoEncodeDecode 1.0.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016 年 2 月

Ravi 维护。



摘要

自动编码和解码,遵守 NSCoding 协议 (NSCoding / NSKeyedArchiver)。

要了解如何实现持久性,请查看以下有用的链接

  1. NSCoding(Apple 文档),
  2. NSHipster-NSCoding,
  3. Ray Wenderlich-Persistance

想象一下,如果你的模型类有大量的实例变量,并且你想将其存储(持久化),你会诅咒自己为

  1. -(id)initWithCoder:(NSCoder *)decoder
  2. - (void)encodeWithCoder:(NSCoder *)encoder

用法

要运行示例项目,请克隆存储库,然后从 Example 目录首先运行 pod install

安装

作者

Ravi Prakash Sahu, [email protected]

许可证

AutoEncodeDecode 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。

示例

模型类

@interface RSClassA : NSObject <NSCoding>

@property NSString *alpha;
@property NSNumber *beta;
@property NSData *gamma;
@property NSArray *listArray;

@end
#import "RSClassA.h"
#import <AutoEncodeDecode/NSObject+NSCoding.h>

@implementation RSClassA

-(void)encodeWithCoder:(NSCoder *)coder {
    [self autoEncodeWithCoder:coder];
}

-(id)initWithCoder:(NSCoder *)coder {
    if (self = [super init]) {
        [self autoDecode:coder];
    }
    return self;
}

@end

这是为极端 懒惰的人 准备的

#import <Foundation/Foundation.h>
#import <AutoEncodeDecode/BaseModel.h>

@interface RSClassB : BaseModel

@property NSString *windows;
@property NSString *mac;

@end
#import "RSClassB.h"

@implementation RSClassB

@end
- (void)testAutoEncoderDecoder {
    // Write to file
    NSString *fileNameWithPath = [self getFilePath:@"Class_A_File"];
    [NSKeyedArchiver archiveRootObject:[self getTestRSClassAObject] toFile:fileNameWithPath];

    // Read the file
    RSClassA *readObjA = [NSKeyedUnarchiver unarchiveObjectWithFile:fileNameWithPath];
    NSLog(@"Alpha : %@, Gaama : %@, Array : %@", readObjA.alpha, readObjA.beta, [readObjA.listArray componentsJoinedByString:@"|"]);

    // Write to file
    fileNameWithPath = [self getFilePath:@"Class_B_File"];
    [NSKeyedArchiver archiveRootObject:[self getTestRSClassBObject] toFile:fileNameWithPath];

    // Read the file
    RSClassB *readObjB = [NSKeyedUnarchiver unarchiveObjectWithFile:fileNameWithPath];
    NSLog(@"Windows : %@, Mac : %@", readObjB.windows, readObjB.mac);
}

- (RSClassA*)getTestRSClassAObject {
    RSClassA *classObject = [RSClassA new];
    classObject.alpha = @"Test";
    classObject.beta = @(10);
    classObject.listArray = @[@"A", @"B"];
    return classObject;
}

- (RSClassB*)getTestRSClassBObject {
    RSClassB *classObject = [RSClassB new];
    classObject.windows = @"I hate it";
    classObject.mac = @"I love it";
    return classObject;
}

- (NSString*)getFilePath:(NSString *)aFileName {
    if (aFileName) {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        return [documentsDirectory stringByAppendingString:[NSString stringWithFormat:@"/%@.archive", aFileName]];
    }
    return nil;
}