复杂对象写入需要建一个类
先建一个Boss的类
#import <Foundation/Foundation.h>
//如果让一个类的所有属性的值都可以移动到一起,方便写入磁盘.系统提供了一个协议:<NSCoding>
@interface Boss : NSObject<NSCoding>
@property (nonatomic,retain)NSString *name;
@property (nonatomic,retain)NSString *gender;
@property (nonatomic,assign)NSInteger age;
@property (nonatomic,assign)NSInteger number;
@end
#import "Boss.h"
@implementation Boss
//两个必须实现的协议方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//编码的方法 把不同数据写到一个地方
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.gender forKey:@"gender"];
[aCoder encodeInteger:self.number forKey:@"number"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
//解码的方法 初始化方法作用是给创建的对象一个初始值
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.gender = [aDecoder decodeObjectForKey:@"gender"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
self.number = [aDecoder decodeIntegerForKey:@"number"];
}
return self;
}
- (void)dealloc
{
[_name release];
[_gender release];
[super dealloc];
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
//复杂对象写入本地
//新建一个boss类
Boss *boss = [[Boss alloc]init];
boss.name = @"大魔王";
boss.gender = @"未知";
boss.age = 1000;
boss.number = 1;
NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.suibian"];
//归档类(把复杂对象的数据写入本地)
[NSKeyedArchiver archiveRootObject:boss toFile:bossPath];
//反归档(按照路径读取数据写入本地)
Boss *newBoss = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];
NSLog(@"%@",newBoss.name);
NSLog(@"%@,%@",boss,newBoss);
[boss release];
//快速将一个简单对象写入本地
//单例: 一个应用程序的执行期间,只能创建出一个对象.
//对于一个单例,系统都会提供一个+号方法作为创建/获取对象的方法
//这个方法第一次使用会创建一个对象,之后使用都是直接获取这个对象
// [NSFileManager defaultManager]
// [UIApplication sharedApplication]
// [UIScreen mainScreen ]
// [NSOperationQueue mainQueue]
// [UIDevice currentDevice]
// [NSThread mainThread];
//存
[[NSUserDefaults standardUserDefaults] setObject:@"qianqian" forKey:@"saveName"];
// //把现有的更改同步到本地
[[NSUserDefaults standardUserDefaults]synchronize];
//取
NSLog(@"%@",[[NSUserDefaults standardUserDefaults]objectForKey:@"saveName"]);
NSUserDefaults *userDe = [NSUserDefaults standardUserDefaults];
//取值
NSString *result = [userDe objectForKey:@"firstTime"];
if (result == nil) {
NSLog(@"第一次");
[userDe setObject:@"suibian" forKey:@"firstTime"];
[userDe synchronize];
}else{
NSLog(@"不是第一次");
}
}