免费开源的iOS开发学习平台

归档:2-单个对象归档/解档

我们通过一个最简单的案例来介绍一个归档与解档的使用方法,新建一个工程,并且添加一个可供输入的UITextField,点击按钮来对输入内容进行归档/解档操作。

准备工作

为了使程序更加简洁,功能更加清晰,我们新建一个ArchiveService类,所有有关归档/解档的方法,我们统一在该方法中实现。在ArchiveService.h中,首先添加用于字符串对象归档解档的方法。

@interface ArchiveService : NSObject
+ (BOOL) writeStringToArchiveFile:(NSString *) string;
+ (NSString *) readStringFromArchiveFile;
@end

在Storyboard中搭建一个简单的界面,能够接收用户输入的一个字符串。同时添加两个按钮【写入归档文件】、【读取归档文件】,并且建立连接到控制器对象。

归档

调用NSKeyedArchiver的类方法archiveRootObject:toFile:可以将对象归档并返回一个布尔值用于标识归档是否成功。

+ (BOOL) writeStringToArchiveFile:(NSString *) string {
    //获取文件路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [docPath stringByAppendingPathComponent:@"string.archive"];
    //归档对象
    return  [NSKeyedArchiver archiveRootObject:string toFile:filePath];
}

点击按钮【写入归档文件】,我们可以根据writeStringToArchiveFile:方法的返回值判断是否归档成功。

归档成功后,我们在App的沙盒路径中,可以看到自动生成的归档文件,并且该归档文件是无法预览的。

解档

通过调用NSKeyedUnarchiver类中提供的unarchiveObjectWithFile:方法,可以将文件解档,并返回文件中存储的对象。

+ (NSString *) readStringFromArchiveFile {
    //获取文件路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [docPath stringByAppendingPathComponent:@"string.archive"];
    //解档
    NSString *string = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    return string;
}

点击按钮【读取归档文件】,在调试区可以看到打印出来的解档内容。

示例代码

https://github.com/99ios/13.4.2