NSCoding归档自定义对象list
使用NSKeyedUnarchiver的unarchiveTopLevelObjectWithData方法获取对象,用rootObject获取到的为Nil
保存和读取一组自定义对象到本地文件:
其中tasks为实现了NSCoding协议的自定义对象list
保存:
if(@available(iOS11.0, *)) {
NSMutableData*data = [[NSMutableDataalloc]init];
NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data]; [archiverencodeObject:tasksforKey:@"tasks"];
[archiverfinishEncoding];
BOOLsuccess = [datawriteToFile:taskFilePathatomically:YES];
}else{
[NSKeyedArchiverarchiveRootObject:tasks toFile:taskFilePath];
}
读取:
NSString *taskFileName = [NSString stringWithFormat:@"%@_Tasks", self.identifier]; NSString *taskFilePath = [self.downloadPath stringByAppendingPathComponent:taskFileName]; NSData *data = [[NSData alloc] initWithContentsOfFile:taskFilePath]; NSArray *tasks = nil;
if (@available(iOS 11.0, *)) {
NSError *error;
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&error];
tasks = [unarchiver decodeObjectForKey:@"tasks"];
} return tasks;
} else {
tasks = [NSKeyedUnarchiver unarchiveObjectWithFile:taskFilePath];
}
return tasks;
}
保存和读取一组自定义对象到NSUserDefault:
保存:
if (@available(iOS 11.0, *)) {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tasks requiringSecureCoding:NO error:nil]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"CYDownloadTasks"]; [[NSUserDefaults standardUserDefaults] synchronize];
} else {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tasks];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"CYDownloadTasks"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
读取:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; NSData *savedTasks = [currentDefaults objectForKey:@"CYDownloadTasks"];
if (@available(iOS 11.0, *)) {
NSError *error;
NSArray *tasks = [NSKeyedUnarchiver unarchiveTopLevelObjectWithData:savedTasks error:&error];
if (error) { NSLog(@"%@",error.localizedDescription);
} }
return tasks;
} else {
NSArray *tasks = [NSKeyedUnarchiver unarchiveObjectWithData:savedTasks];
}