NSUserDefaults保存NSObject类型的方法

来源:互联网 发布:淘宝网野生松杉灵芝 编辑:程序博客网 时间:2024/05/20 11:46
查看官方的API,NSUserDefaults支持保存的数据类型有:NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary


对于,我们创建的NSObject不可以直接保存,如果调用setObject,会提示出错,信息如下:


*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ‘<Student: 0x8399f70>’ of class ‘Student’.  Note that dictionaries and arrays in property lists must also contain only property values.


当保存一个Student对象时,提示我,NSUserDefaults没有这样的属性,那么如果想要保存student中的信息,可以将studnet的信息保存到一个NSDictionary中,然后获取到这个NSDictionary,再从它里面获取每一个属性;


当然这种方式弱爆了,注意一下上面保存的类型可以保存NSData类型,不防将Student类转换为NSData类型,然后


取值时再将NSData转化为Student类;


还是用代码来说明:
<span style="font-size:14px;">Student.h 代码 #import <Foundation/Foundation.h>@interface Student : NSObject <NSCoding>{    NSString *name;}@property (nonatomic, retain) NSString *name;@endStudent.m 代码#import "Student.h"@implementation Student@synthesize name;- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.name forKey:@"name"];}- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if (self) {        self.name = [aDecoder decodeObjectForKey:@"name"];    }    return self;}- (void)dealloc{    [name release];    name = nil;    [super dealloc];}@end调用的代码:Student *student = [[Student alloc] init];[student setName:@"Jordy"];NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];NSData *studentData = [NSKeyedArchiver archivedDataWithRootObject:student];[userDefault setObject:studentData forKey:@"Student"];[userDefault synchronize];[student release];NSData *data = [userDefault objectForKey:@"Student"];Student *stu = [NSKeyedUnarchiver unarchiveObjectWithData:data];NSLog(@"stu: %@, stu.name: %@",stu,stu.name); </span>


0 0
原创粉丝点击