iOS 归档

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    self.window.rootViewController = [[RootViewController alloc] init];

    [self.window makeKeyAndVisible];
    return YES;
}

@end
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end
#import "RootViewController.h"
#import "User.h"
@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    User *user = [User userInfo];
    user.name = @"LF";
    user.address = @"广州";
    NSLog(@"归档前===%@===%@",user.name,user.address);
    //归档
    [NSKeyedArchiver archiveRootObject:user toFile:[self fileToPath]];
    //解归档
    User *user2 = [NSKeyedUnarchiver unarchiveObjectWithFile:[self fileToPath]];

    NSLog(@"归档后===%@===%@",user2.name,user2.address);
    user2.address = @"北京";
    [NSKeyedArchiver archiveRootObject:user2 toFile:[self fileToPath]];
    //解归档
    User *user3 = [NSKeyedUnarchiver unarchiveObjectWithFile:[self fileToPath]];

    NSLog(@"重新归档后===%@===%@",user3.name,user3.address);
}
/**
 *  获取文件路径
 */
- (NSString *)fileToPath{
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *path = [docPath stringByAppendingString:@"userInfomation"];
    NSLog(@"%@",path);
    return path;
}

@end
#import <Foundation/Foundation.h>

@interface User : NSObject<NSCoding>

@property(nonatomic, copy) NSString *name;
@property(nonatomic, copy) NSString *address;

+ (User*)userInfo;

@end
#import "User.h"

#define userName @"name"
#define userAddress @"address"

@implementation User

#pragma mark 单例模式
static User *instance  = nil;
+ (User*)userInfo{
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

//归档
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_name forKey:userName];
    [aCoder encodeObject:_address forKey:userAddress];
}

// 解归档
#pragma mark NSCoding协议方法
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectForKey:userName];
        self.address = [aDecoder decodeObjectForKey:userAddress];
    }
    return self;
}

@end
时间: 2024-10-20 22:10:24

iOS 归档的相关文章

iOS归档与解归档,持久化存储

点此下载iOS归档,持久化存储,解归档详细工程 //数据持久化的本质:将数据读取成文件保存在本地. 沙盒机制就是系统针对于每一个程序在本地生成的文件夹(名字随机生成), 对于不同的应用程序, 不能访问其他应用程序沙盒内的内容, 对于该应用程序内容起到保护作用:1 Documents:用来存储长久保存的数据 2 xxx.app:应用程序的包, 包含应用程序加载所需的所有资源(readonly只读, 不可修改), 平时使用的NSBundle就是该包 3 Library: 1) Caches:本地缓存

iOS归档,解档

iOS中,将一个实例对象存入沙盒中,叫归档;从沙盒文件中读取一个实例对象,叫解档. 下面即将诞生一个栗子:比如你想把一个ZHHPerson类中的name与age属性的值存入沙盒文件中,并在需要的时候,去沙盒文件中读取出来. 分析: 要对Person类的对象实现归档,解档的操作,必须要实现这两个方法:encodeWithCoder:归档时系统自动执行;initWithCoder:解档时系统自动执行. 对着两个方法的实现,这里采用的是高大上的用法:运行时机制.这个栗子看不出运行时机制的好处.但是的但

iOS --归档存储自定义对象

#import <Foundation/Foundation.h> @interface User : NSObject<NSCoding> //遵循NSCoding协议 /** name */ @property (nonatomic, copy) NSString *name; /** age */ @property (nonatomic, assign) NSInteger age; //自定义初始化方法 - (instancetype)initWithName:(NSSt

iOS归档解档

使用NSKeyedArichiver进行归档.NSKeyedUnarchiver进行接档,这种方式会在写入.读出数据之前对数据进行序列化.反序列化操作. 1.对单个字符串归档 //获取根目录 NSString *homeDictionary = NSHomeDirectory(); //添加储存的文件名 NSString *homePath = [homeDictionary stringByAppendingPathComponent:@"myText.txt"]; //归档一个字符

ios 归档学习笔记

归档是指用某种格式来保存一个或者多个对象,以便以后还原这些对象的过程. 使用xml属性列表进行归档 如果你是对NSString,NSDictionary,NSArray,NSData,NSNumber对象进行归档,可以使用类中实现的writeToFile:atomically:方法将数据写到文件中. 使用dictionaryWithContentsOfFile 或者arrayWithContentsOfFile,dataWithContentsOfFile,stringWithContentsO

iOS 归档解档

归档: NSMutableData *data = [[NSMutableData alloc] init]; //创建归档辅助类 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; //编码 [archiver encodeObject:@"2009-12-09" forKey:@"dataTime"]; //结束编码 [archiver

[转载]iOS&#160;归档操作&#160;NSCoding

最近一个项目需要保存到本地文件,想用plist,但是发现很多内容是自定义的,于是只能自己归档接档.不难,找了一篇范文大家保存一下,方便以后学习使用. 转自:http://mobile.51cto.com/iphone-282203_4.htm iPhone开发应用之Archiving NSCoder教程是本文要介绍的内容,一个面向对象程序在运行的时候,一般都创建了一个复杂的对象关系图,经常需要把这样一个复杂的对象关系图表示成字节流.这样的过程我们叫做Archiving 如图10.1, 这个字节流

IOS学习之NSKeyedArchiver、NSKeyedUnarchiver归档

IOS保存文件的其中一种形式是NSKeyedArchiver.NSKeyedUnarchiver归档: 以下内容以一个to-do lists软件为例,ChecklistItem为一个项目(数据模型),包含一个字符串text和一个BOOL标记checked,items是视图控制器的NSMutableArray,包含多个ChecklistItem,保存数据时以items为整体保存到.plist文件,读取则一样. 1.首先在数据模型的.h文件中实现协议<NSCoding>,例如: @interfac

IOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 8.0是模拟器版本)/Users/apple/Libra