該模型需要歸檔解檔的屬性包含:
1,詞牌名/詩格的編號;2,修改時間的數組;3,標題;4,內容;5,箋注;6,圖片數組;7,是否已存服務器;8,是否已完成。
準備條件:需要對該模型的屬性進行歸解檔。遵循代理<NSCoding>
```
#pragma mark - NSCoding 的代理方法
// 歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.titleText forKey:@"titleText"];
[aCoder encodeObject:self.annotation forKey:@"annotation"];
[aCoder encodeObject:self.poetryType forKey:@"poetryType"];
[aCoder encodeObject:self.alter_time forKey:@"alter_time"];
[aCoder encodeObject:self.imageArray forKey:@"imageArray"];
[aCoder encodeObject:self.contentText forKey:@"contentText"];
[aCoder encodeObject:self.isCompliment forKey:@"isCompliment"];
[aCoder encodeObject:self.isExistServer forKey:@"isExistServer"];
}
// 解檔
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self == [super init]) {
self.titleText = [aDecoder decodeObjectForKey:@"titleText"];
self.poetryType = [aDecoder decodeObjectForKey:@"poetryType"];
self.alter_time = [aDecoder decodeObjectForKey:@"alter_time"];
self.annotation = [aDecoder decodeObjectForKey:@"annotation"];
self.imageArray = [aDecoder decodeObjectForKey:@"imageArray"];
self.contentText = [aDecoder decodeObjectForKey:@"contentText"];
self.isCompliment = [aDecoder decodeObjectForKey:@"isCompliment"];
self.isExistServer = [aDecoder decodeObjectForKey:@"isExistServer"];
}
return self;
}
```
存儲分以下三步
第一步,設置Key值:注冊用戶ID+yyyyMMddhhmmss(注:該時間為創建時間)
第二步,把需要存儲的單個模型序列化成數據類型,并且存儲于偏好設置:
```
NSData*archiveCarPriceData = [NSKeyedArchiverarchivedDataWithRootObject:self.shiciModel];
[[NSUserDefaultsstandardUserDefaults]setObject:archiveCarPriceDataforKey:key];
```
第三步,把key值寫進自己新建的Plist文件里作為數組保存:Exist.plist
```
//存儲Key值
NSMutableArray*arrayM = [[NSMutableArrayalloc]initWithContentsOfFile:BaseInfo.exitPath];
if(arrayM == nil) {
arrayM = [NSMutableArrayarray];
}
[arrayMaddObject:key];
[arrayMwriteToFile:BaseInfo.exitPathatomically:YES];
```
讀取分以下三步
1,讀取新建的plist文件獲取存儲的Key值數組:
```
- (NSArray*)existKeys {
return [NSArray arrayWithContentsOfFile:BaseInfo.exitPath];
}
```
2,在需要展示的時候遍歷讀取的數據Key值去偏好設置讀取模型數據,通過反序列化轉化為模型:
```
/**
*讀取歸檔的內容
*/
+ (NSArray *)getCoderModel{
NSMutableArray*arrayM = [NSMutableArrayarrayWithCapacity:BaseInfo.existKeys.count];
[BaseInfo.existKeysenumerateObjectsUsingBlock:^(NSString*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {
NSData*myEncodedObject = [[NSUserDefaultsstandardUserDefaults]objectForKey:obj];
SCIShiciModel*model = [[SCIShiciModelalloc]init];
model = [NSKeyedUnarchiverunarchiveObjectWithData:myEncodedObject];
[arrayMaddObject:model];
}];
return[arrayMmutableCopy];
}
```
3,根據存儲的模型屬性,在需要的地方進行有條件的展示。