iOS数据存储之--NSCoding
来源:互联网 发布:dijkstra算法步骤例题 编辑:程序博客网 时间:2024/06/05 15:46
在iOS的开发中,小数据量的持久化都用NSUserDefaults来实现,但是NSUserDefaults只能保存NSString, NSNumber, NSDate, NSArray, NSDictionary这些数据类型,但大多时候,我们会将一个对象实体做持久化的保存,由于不是大批量的数据,不会用到sqlite,那么这个时候NSUserDefaults会是很好的选择,其实对象类型可以通过NSCoding的委托方法来实现的。
- View Code //
- // UserEntity.m
- // NSCodingDemo
- //
- // Created by on 11-5-20.
- // Copyright 2011 , Inc. All rights reserved.
- //
- #import "UserEntity.h"
- #import "AddressEntity.h"
- #define SAMPLEDATA_KEY_USERNAME (@"userName")
- #define SAMPLEDATA_KEY_GENDER (@"gender")
- #define SAMPLEDATA_KEY_AGE (@"age")
- #define k_FRIENDS (@"frinds")
- #define k_ADDRESS (@"address")
- #define k_userEntity_addresses (@"addresses")
- @implementation UserEntity
- @synthesize userName = _userName;
- @synthesize gender = _gender;
- @synthesize age = _age;
- @synthesize friends = _friends;
- @synthesize address = _address;
- @synthesize addresses = _addresses;
- -(void)dealloc
- {
- [self.userName release];
- [self.friends release];
- [self.address release];
- [self.addresses release];
- [super dealloc];
- }
- - (void)encodeWithCoder:(NSCoder*)coder
- {
- [coder encodeObject:self.userName forKey:SAMPLEDATA_KEY_USERNAME];
- [coder encodeInt:self.age forKey:SAMPLEDATA_KEY_AGE];
- [coder encodeBool:self.gender forKey:SAMPLEDATA_KEY_GENDER];
- [coder encodeObject:self.friends forKey:k_FRIENDS];
- [coder encodeObject:self.address forKey:k_ADDRESS];
- [coder encodeObject:self.addresses forKey:k_userEntity_addresses];
- }
- - (id)initWithCoder:(NSCoder*)decoder
- {
- if (self = [super init])
- {
- if (decoder == nil)
- {
- return self;
- }
- self.userName = [decoder decodeObjectForKey:SAMPLEDATA_KEY_USERNAME];
- self.gender = [decoder decodeBoolForKey:SAMPLEDATA_KEY_GENDER];
- self.age = [decoder decodeIntForKey:SAMPLEDATA_KEY_AGE];
- self.friends = [decoder decodeObjectForKey:k_FRIENDS];
- self.address = [decoder decodeObjectForKey:k_ADDRESS];
- self.addresses = [decoder decodeObjectForKey: k_userEntity_addresses];
- }
- return self;
- }
- @end
- View Code //
- // AddressEntity.m
- // NSCodingDemo
- //
- // Created by on 11-5-20.
- // Copyright 2011 , Inc. All rights reserved.
- //
- #import "AddressEntity.h"
- #define k_Id (@"id")
- #define k_AddresEntity_address (@"addrss")
- @implementation AddressEntity
- @synthesize Id, address;
- -(void)dealloc
- {
- [self.address release];
- [super dealloc];
- }
- - (NSString *)description
- {
- return [NSString stringWithFormat:@"id :%d address: %@" , self.Id, self.address];
- }
- - (void)encodeWithCoder:(NSCoder*)coder
- {
- [coder encodeObject:self.address forKey:k_AddresEntity_address];
- [coder encodeInt:self.Id forKey:k_Id];
- }
- - (id)initWithCoder:(NSCoder*)decoder
- {
- if (self = [super init])
- {
- if (decoder == nil)
- {
- return self;
- }
- self.address = [decoder decodeObjectForKey:k_AddresEntity_address];
- self.Id = [decoder decodeIntForKey:k_Id];
- }
- return self;
- }
- @end
- View Code -(IBAction)write:(id)sender
- {
- //get document path
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];
- NSMutableData *data = [[[NSMutableData alloc] init] autorelease];
- NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
- UserEntity *userEntity = [[[UserEntity alloc] init] autorelease];
- userEntity.age = 18;
- userEntity.gender = NO;
- userEntity.userName = @"add";
- NSArray *friends = [[NSArray alloc] initWithObjects:@"ac", @"2", @"3", @"4", nil];
- userEntity.friends = friends;
- AddressEntity *address = [[[AddressEntity alloc] init] autorelease];
- address.Id = 1;
- address.address = @"china";
- userEntity.address = address;
- AddressEntity *address2 = [[[AddressEntity alloc] init] autorelease];
- address2.Id = 2;
- address2.address = @"china2";
- AddressEntity *address3 = [[[AddressEntity alloc] init] autorelease];
- address3.Id = 3;
- address3.address = @"china3";
- NSArray *addresses = [[NSArray alloc] initWithObjects:address2, address3 , nil];
- userEntity.addresses = addresses;
- [archiver encodeObject:userEntity forKey:@"KEY"];
- [archiver finishEncoding];
- BOOL success = [data writeToFile:filePath atomically:YES];
- }
- -(IBAction)read:(id)sender
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];
- NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
- NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
- UserEntity *userEntity = [unArchiver decodeObjectForKey:@"KEY"];
- NSLog(@"name is %@ , friend %@ address :%@ , addresses is :%@", userEntity.userName , userEntity.friends , userEntity.address, userEntity.addresses);
- }
0 0
- iOS数据存储之--NSCoding
- ios 沙盒 NSCoding 归档 数据存储
- 数据存储之归档-NSCoding协议
- 数据存储(NSCoding)
- 归档 NSCoding 数据存储小结《IOS编程》 读后总结
- iOS 数据存储 归档普通对象 NSCoding NSKeyedArchiver
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- iOS数据持久化---NSCoding
- ios-day12-04(ios开发中数据存储之NSKeyedArchiver归档(NSCoding)、普通对象如何归档、普通对象的子类如何归档)
- iOS数据存储之--NSUserDefaults
- <NSCODING> 存储数据 NSUSERDEFAULTS 读取和写入
- NSCoding归档数据持久化存储
- [数据存储之一]NSCoding协议练习
- 【iOS开发-75】iOS数据存储的三种简单方式:plist、preference以及用NSCoding存储对象
- [Clojure] A Room-Escape game, playing with telnet and pure-text commands - Part 3
- nyoj71--独木舟上的旅行
- File Inclusion -medium
- 经典排序之快速排序
- 待解决问题
- iOS数据存储之--NSCoding
- git基础常用指令汇总
- Android Studio adb无法启动解决方案
- 【Java】【Oracle】Java操作Oracle 12c数据库基本步骤介绍——从零开始#1
- 一致性哈希算法及其在分布式系统中的应用
- ACdream 1417(Number)
- epoll机制:epoll_create、epoll_ctl、epoll_wait、close
- 今日开通博客
- 关于产品的一些思考——(四十一)网易之有道云笔记