归档:4-归档多个自定义对象
在实际的开发过程中,我们通常会把多个自定义对象放在一个数组中进行操作,这其中也包括对存储自定义对象的数组进行归档/解档操作。
实现思路
当我们需要归档多个自定义对象时,通常采取如下的思路。
- 定义自定义类,遵守NSCoding协议,并实现NSCoding协议中定义的归档、解档方法;
- 在需要使用自定义对象的地方,创建一个数组,用于存储自定义对象;
- 在工具类中,对存储自定义对象的数组实现归档以及解档操作
示例代码
我们通过一个示例实现归档/解档多个自定义对象。在该案例中,我们可以把多个自定义对象写入一个数组中,并对该数组进行归档、解档操作。
创建一个Person类,添加属性,遵守NSCoding协议,并实现NSCoding协议中定义的方法,具体实现方法参见上一章节;
在ArchiveService工具类中,添加如下两个方法,实现对数组的归档与解档操作
@interface ArchiveService : NSObject
+ (BOOL) writeObjectsToArchiveFile:(NSArray *) array;
+ (NSMutableArray *) readObjectsFromArchiveFile;
@end
- 实现writeObjectsToArchiveFile:方法。在该方法中调用NSKeyedArchiver的类方法archiveRootObject:toFile:将数组对象归档。
+ (BOOL) writeObjectsToArchiveFile:(NSArray *) array{
//获取文件路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [docPath stringByAppendingPathComponent:@"persons.archive"];
//归档
return [NSKeyedArchiver archiveRootObject:array toFile:filePath];
}
- 实现readObjectsFromArchiveFile方法,在该方法中,调用NSKeyedUnarchiver的类方法unarchiveObjectWithFile:实现从文件中解档数组
+ (NSMutableArray *) readObjectsFromArchiveFile{
//获取文件路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [docPath stringByAppendingPathComponent:@"persons.archive"];
//解档
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
return array;
}
- 在控制器类中,添加一个数组属性用于存储自定义对象,并实现其初始化方法,在初始化方法中,使用解档操作来获取存储在本地文件中的对象数据
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *personsArray;
@end
-(NSMutableArray *)personsArray{
if (_personsArray == nil) {
//从归档文件中创建,如果文件不存在,则初始化一个空的数组
_personsArray = [ArchiveService readObjectsFromArchiveFile];
if (_personsArray == nil) {
_personsArray = [NSMutableArray array];
}
}
return _personsArray;
}
- 搭建界面
- 实现【写入归档文件】按钮的操作,可以反复写入多个对象到本地文件
- (IBAction)writeToFile:(id)sender {
NSDictionary *dict = @{@"name":self.nameTextField.text,
@"age":self.ageTextField.text};
Person *person = [Person personWithDict:dict];
[self.personsArray addObject:person];
if([ArchiveService writeObjectsToArchiveFile:self.personsArray]){
NSLog(@"归档成功");
};
}
- 实现【读取归档文件】按钮功能,可以读取出存储的多个对象
- (IBAction)readFromFile:(id)sender {
NSMutableArray *persons = [ArchiveService readObjectsFromArchiveFile];
for (Person *person in persons) {
NSLog(@"person name: %@, person age:%@", person.name,person.age);
}
}
https://github.com/99ios/13.4.4
文章发布时间为: December 5th , 2016 at 04:46 pm
最后编辑时间为: September 15th , 2017 at 05:34 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 15th , 2017 at 05:34 am
本文由 99ios 创作,转载请注明出处