NSUserDefaults写作和阅读对象定义自己
2015-10-11 13:16
218 查看
需要编写对象必须实现NSCoding protocol
Person Class
Face Class
Person Class
Person.h #import <Foundation/Foundation.h> #import "Face.h" @interface Person : NSObject <NSCoding> @property (nonatomic, strong) NSString *personId; @property (nonatomic, strong) NSString *name; @property (nonatomic, assign) NSInteger age; @property (nonatomic, strong) NSArray *photos; @property (nonatomic, strong) NSDictionary *phoneNumber; @property (nonatomic, strong) Face *face; @end Person.m #import "Person.h" @implementation Person @synthesize personId = _personId; @synthesize name = _name; @synthesize age = _age; @synthesize photos = _photos; @synthesize phoneNumber = _phoneNumber; @synthesize face = _face; - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super init]) { self.personId = [aDecoder decodeObjectForKey:@"id"]; self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [[aDecoder decodeObjectForKey:@"age"] integerValue]; self.photos = [aDecoder decodeObjectForKey:@"photos"]; self.phoneNumber = [aDecoder decodeObjectForKey:@"phoneNumber"]; self.face = [aDecoder decodeObjectForKey:@"face"]; } return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.personId forKey:@"id"]; [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:[NSNumber numberWithInteger:self.age] forKey:@"age"]; [aCoder encodeObject:self.photos forKey:@"photos"]; [aCoder encodeObject:self.phoneNumber forKey:@"phoneNumber"]; [aCoder encodeObject:self.face forKey:@"face"]; }
Face Class
Face.h #import <Foundation/Foundation.h> @interface Face : NSObject <NSCoding> @property (nonatomic, strong) NSString *head; //@property (nonatomic, strong) NSString *eyes; //@property (nonatomic, strong) NSString *nose; //@property (nonatomic, strong) NSString *mouth; //@property (nonatomic, strong) NSString *ears; @end Face.m #import "Face.h" @implementation Face - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super init]) { self.head = [aDecoder decodeObjectForKey:@"head"]; } return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.head forKey:@"head"]; } @end
写入和读取操作 Person *person = [[Person alloc] init]; person.personId = @"123456789"; person.name = @"Hunk"; person.age = 10; person.photos = @[@"a.png", @"b.png", @"c.png"]; person.phoneNumber = @{@"mobile_phone" : @"987654321", @"work" : @"01012345678"}; Face *face = [[Face alloc] init]; face.head = @"Round shape"; person.face = face; NSData *personData0 = [NSKeyedArchiver archivedDataWithRootObject:person]; [[NSUserDefaults standardUserDefaults] setObject:personData0 forKey:@"person"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSData *personData1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"person"]; Person *person1 = [NSKeyedUnarchiver unarchiveObjectWithData:personData1];
相关文章推荐
- Android自定义控件——FloatLayout
- linux的文件系统与目录
- Android APK反编译详解(附图)
- ajax跨域之---服务器端代理实现
- debian下没有公钥解决办法
- MVC中DropDownListFor赋初始选择值问题
- CSS从大图中抠取小图完整教程(background-position应用) (转)
- 第十章 Linux下RPM软件的安装与卸载
- Codeforces Round #321 (Div. 2)B. Kefa and Company
- Cocos2d-x在线粒子编辑器
- 细说Servlet
- Gas Station
- BestCoder Round 59 (HDOJ 5500) Reorder the Books
- hdu4770 暴力状压 Lights Against Dudely (2013 Asia Hangzhou Regional Contest problem A)
- 2台主机极致实现双主复制架构及MMM
- jQuery源码测试笔记之domManip函数
- Android开机启动程序
- 提供应用10倍性能的10个手段
- Android IOS WebRTC 音视频开发总结(四五)-- ORTC背后的真相
- 欢迎使用CSDN-markdown编辑器