归档与解档的注意点
1.归档时的路径不能越级存放,原因是归档时不会将路径过程中没有的文件夹创建出来。
正确的写法:
// 存储上传文件信息的路径(caches)
#define UploadCachesDirectory [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]stringByAppendingPathComponent:@"UploadCache.data”] [NSKeyedArchiver archiveRootObject:documentUploadFileModel toFile:UploadCachesDirectory];
错误的写法:
// 缓存主目录
#define ZFCachesDirectory [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory NSUserDomainMask, YES) firstObject]stringByAppendingPathComponent:@"ZFCache”] #define UploadCaches [ZFCachesDirectory stringByAppendingPathComponent:@"uploadCaches.data”] [NSKeyedArchiver archiveRootObject:documentUploadFileModel toFile:UploadCaches];
2.对同一个数据,多处进行解档和归档操作,处理不当很容易造成,类似于多线程访问同一数据而引起的混乱。
解决方案:
前提-左边为长循环,右边为突发事件。
关键-其实,如果右边的归档发生在左边的归档之后,就不会发生混乱。因此,要解决的就是,突发事件的归档已经完成,当时左边归档的对象竟然还是之前解档时获得的最初值。
策略-在左边进行归档操作前,将右边突发事件的修改值,放在左边的归档前。比如,假如下面代码:
//归档前,需要
DocumentUploadFileModel *tempUploadFileModel = [NSKeyedUnarchiver unarchiveObjectWithFile:UploadCachesDirectory];
documentUploadFileModel.uploadPause = tempUploadFileModel.uploadPause;