iOS 應(yīng)用數(shù)據(jù)存儲(chǔ)的常用方式主要有:
- XML 屬性列表(plist)歸檔
- Preference(偏好設(shè)置)
- NSKeyedArchiver 歸檔(NSCoding)
- SQLite3
- Core Data
今天小主教大家最簡(jiǎn)單的本地存儲(chǔ)方式。
大體的主要思路是我們通常用 AFNetworking 網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)(返回結(jié)果一般是大字典),我們要在請(qǐng)求成功的 Block 中把請(qǐng)求回來(lái)的數(shù)據(jù)歸檔寫(xiě)入 Plist 文件中,再在請(qǐng)求失敗的 Block 里將數(shù)據(jù)反歸檔取出,再進(jìn)行數(shù)據(jù)解析。
第一步:我們要封裝歸檔反歸檔工具
@interface ZHArchiverTools : NSObject
//歸檔的工具方法
+ (void)archiverObject:(id)object ByKey:(NSString *)key
WithPath:(NSString *)path;
+ (id)unarchiverObjectByKey:(NSString *)key
WithPath:(NSString *)path;
@end
@implementation ZHArchiverTools
+ (void)archiverObject:(id)object ByKey:(NSString *)key WithPath:(NSString *)path
{
// 初始化存儲(chǔ)對(duì)象信息的data
NSMutableData *data = [NSMutableData data];
// 創(chuàng)建歸檔工具對(duì)象
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
// 開(kāi)始?xì)w檔
[archiver encodeObject:object forKey:key];
// 結(jié)束歸檔
[archiver finishEncoding];
// 寫(xiě)入本地
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
NSString *destPath = [[docPath stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:path];
[data writeToFile:destPath atomically:YES];
}
+ (id)unarchiverObjectByKey:(NSString *)key WithPath:(NSString *)path
{
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
NSString *destPath = [[docPath stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:path];
NSData *data = [NSData dataWithContentsOfFile:destPath];
// 創(chuàng)建反歸檔對(duì)象
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
// 接收反歸檔得到的對(duì)象
id object = [unarchiver decodeObjectForKey:key];
return object;
}
@end
(以上歸檔反歸檔可以直接封裝到網(wǎng)絡(luò)請(qǐng)求的工具類中,以網(wǎng)址為鍵)
第二步:
歸檔存數(shù)據(jù)
第三步:
反歸檔取數(shù)據(jù)
斷網(wǎng)打開(kāi)APP,緩存完成。