<NSCODING> 存储数据 NSUSERDEFAULTS 读取和写入
2013-12-05 11:19
351 查看
<NSCODING> 存储数据 NSUSERDEFAULTS 读取和写入
NSUserDefaults读取和写入自定义对象 NSUserDefaults可以存取一些短小的信息。 比如存入再读出一个字符串到NSUserDefaults: view plaincopy to clipboardprint? NSString *string= [NSString stringWithString @"hahaha"]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [ud setObject:string forKey:@"myKey"]; NSString *value; value = [ud objectForKey:"myKey"]; 但是并不是所有的东西都能往里放的。NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary. 如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的。不信可以试试,如果你成功的请告诉我。 那怎么办呢? 我找到的方法是,让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。 粘代码: 假设有这样一个简单的类对象 view plaincopy to clipboardprint? @interface BusinessCard : NSObject <NSCoding>{ NSString *_firstName; NSString *_lastName; } @property (nonatomic, retain) NSString *_firstName; @property (nonatomic, retain) NSString *_lastName; @end; @implementation BusinessCard @synthesize _firstName, _lastName; - (void)dealloc{ [_firstName release]; [_lastName release]; [super dealloc]; } - (id) initWithCoder: (NSCoder *)coder { if (self = [super init]) { self._firstName = [coder decodeObjectForKey:@"_firstName"]; self._lastName = [coder decodeObjectForKey:@"_lastName"]; } return self; } - (void) encodeWithCoder: (NSCoder *)coder { [coder encodeObject:_firstName forKey:@"_firstName"]; [coder encodeObject:_lastName forKey:@"_lastName"]; } @end 然后再存取时通过NSData做载体: view plaincopy to clipboardprint? BusinessCard *bc = [[BusinessCard alloc] init]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc]; [ud setObject:udObject forKey:@"myBusinessCard"]; [bc release]; udObject = nil; udObject = [ud objectForKey:@"myBusinessCard"]; bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;
相关文章推荐
- &lt;NSCODING&gt;&nbsp;存储数据&amp;n…
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- 存储数据方法之一:NSUserDefaults 读取和写入
- 存储数据方法之一:NSUserDefaults 读取和写入
- 存储数据方法之一:NSUserDefaults 读取和写入
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <Oracle基本的数据存储机制-表>
- ios开发系列之文件的写入读取,NSUserDefaults存储数据,NSFileManager操作文件和文件夹
- <Android>在Activity被非正常杀死并重建时,使用savedInstanceState进行数据恢复的简单实例
- 【数字图像处理】<纯C++>读取、裁剪、缩放、旋转和存储8位bmp灰度图像
- <Java>short与byte在有符号大数据时的转换
- oc NSFileHandle,文件读写管理类对对象数组的读写需遵守<NSCoding>协议
- <s:property>标签从后台读取Date类型年份为两位在jsp页面显示的解决方法
- react-native-AsyncStorage<持久化数据存储>
- 数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)
- <Android>使用缓冲区实时写入文件一
- asp.net读取Web.config的<appSettings></appSettings>
- <Linux+Qt>将中文写入串口
- IPHONE数据存储的常用方式NSKEYEDARCHIVER/NSUSERDEFAULTS/PLIST WRITE写入