2015年12月20日
#import "Person.h"
#define path @"/users/wayh/desktop"//目录名不区分大小写
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSDictionary * dic = [[NSDictionary alloc] initWithObjectsAndKeys: @"One", @"1", @"Two", @"2", @"Three", @"3", nil];//初始化字典
[dic writeToFile:[NSString stringWithFormat:@"%@/dic.plist",path] atomically:YES];//返回值为BOOL;如果目录不存在则创建不成功
NSDictionary * dic2 = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat: @"%@/dic.plist", path]];//ContentsOfFlie 通过文件的绝对路径拿到该文件的内容,并转换成对应的数据结构;如果路径正确则返回内容,否则返回null
NSString *rootPath = NSHomeDirectory();//获取当前app(在手机中)的根目录
NSFileManager *manager = [NSFileManager defaultManager];
[manager contentsOfDirectoryAtPath:rootPath error:nil];//读取rootPath目录下文件和文件夹
NSDictionary * dic3 = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat: @"/guidang/dic.plist"]];
NSString * route = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES)[0];//取得沙盒中的目录集合;参数1:目录,参数2:用户的使用规格,参数3:YES;并取集合的第1项得到对应目录
//???第2项以后又是什么?
Person * person1 = [[Person alloc]init];
person1.name = @"Jason";
person1.age = 28;
#pragma mark 自定义方法归档解档
//归档管理者
NSData * data = [NSKeyedArchiver archivedDataWithRootObject: person1];//将对象压缩成二进制数据
[data writeToFile:[NSString stringWithFormat:@"%@/dic.zip",path] atomically:YES];//写入文件
//解档管理者
NSData * uData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@/dic.zip",path]];//获取文件内容
Person * p = [NSKeyedUnarchiver unarchiveObjectWithData:uData];//将数据解压成对象,用原数据类型来接
#pragma mark 系统自带库归档解档
NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];//系统自带的小型数据库,使用自定义类时需要引用<NSCoding>及方法
[ud setObject:data forKey:@"personData"];//存入数据,并指定键值
[ud synchronize];//同步更新
NSData * gData = [[NSUserDefaults standardUserDefaults] objectForKey:@"personData"];//对应键值获取文件内容
Person * pp = [NSKeyedUnarchiver unarchiveObjectWithData:gData];
}
return 0;
}
@interface Person : NSObject <NSCoding>//遵循NScodiing的协议,并要遵循协议都方法
@property (nonatomic , copy) NSString *name;
@property (nonatomic , assign) NSInteger age;
@end
@implementation Person
//以下两种方法均为NSCoding协议方法
- (void) encodeWithCoder : (NSCoder *) aCoder//对自定义类进行归档
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
- (id) initWithCoder : (NSCoder *) aDecoder//对自定义类进行解档
{
if (self = [super init])
{
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
return self;
}
@end