自动编码和解码,遵守 NSCoding 协议 (NSCoding / NSKeyedArchiver)。
要了解如何实现持久性,请查看以下有用的链接
想象一下,如果你的模型类有大量的实例变量,并且你想将其存储(持久化),你会诅咒自己为
-(id)initWithCoder:(NSCoder *)decoder
和- (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;
}