NSUserDefaults的一些用法

NSUserDefaults是一个单例,整个程序中只有一个实例化对象。
NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL。
不支持自定义的Model类型。
如保存一个NSString的数据,可以用

NSString *passWord = @"123456";
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:passWord forKey:@"userPassWord"];

读取数据时,用

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSString *passWord = [user objectForKey:@"userPassWord"];

需要注意的是,对于相同key的多次赋值,相当于多次覆盖,所以要保证key的唯一性。

NSUserDefaults存储的对象全是不可变的。如想存储NSMutableArray的数据时,必须先创建一个不可变数组NSArray,再将它存入NSUserDefaults。如:

NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil];
NSArray * array = [NSArray arrayWithArray:mutableArray];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:array forKey:@"存储的一定是不可变的"]; 

读取数据时,可以用NSUserDefaults对可变数组赋值。但要注意

/*-------------------------错误的赋值方法-------------------*/
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
//这样写后,mutableArray 就变成了不可变数组了,如果你要在数组中添加或删除数据就会出现bug
NSMutableArray *mutableArray = [user objectForKey:@"存储的一定是不可变的"];

正确的做法为:

/*-------------------------正确的赋值方法-------------------*/
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
//可以用alloc 方法代替
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:[user objectForKey:@"存储的一定是不可变的"]];

在存储自定义Model时,往往一个对象有多个属性,如User有name,age,sex等属性。但NSUserDefaults不支持自定义Model,需要先将其转化为NSData。如:
先建个User类,

@interface User:NSObject
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *age;
@end

若要将User转化为NSData,就需要遵守NSCoding协议 ,在.m中实现encodeWithCoder和
initWithCoder方法。
所以修改如下:

@interface User:NSObject<NSCoding>
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *age;
@end

在.m中

@implementation User
-(void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
}

-(id)initWithCoder:(NSCoder *) aDecoder{
    if(self = [super init]){
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeObjectForKey:@"age"];
    }
    return self;
}

@end

然后将自定义类型存入NSUserDefaults中,可以建一个NSMutableArray存储所有的User。

User *user = [[User alloc] ini];
//下面进行的是对user对象的 name ,age的赋值
user.name = @"somebody";
user.age = @"12";
//这是一个存放所有用户的数组
NSMutableArray * dataArray = [NSMutableArray arrayWithCapacity:50];
//将user类型变为NSData类型
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:user];
//存放数据的数组将data加入进去
[dataArray addObject:data];

若只想存储一个人的信息,可以直接将NSData存入NSUserDefaults中

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:user];
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:data forKey:@"oneUser"];

从NSData中还原数据也很简单,如

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSdData *data = [user objectForKey:@"oneUser"];
User *user = [NSKeyedUnarchiver unarchiveObjectWithData:data];
时间: 2024-08-13 04:42:01

NSUserDefaults的一些用法的相关文章

IOS中NSUserDefaults的用法(轻量级本地数据存储)

iOS数据保存 IOS中NSUserDefaults的用法(轻量级本地数据存储) IOS中NSUserDefaults的用法(轻量级本地数据存储),布布扣,bubuko.com

ios中NSUserDefaults的用法

ios中NSUserDefaults的用法 NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等.默认系统允许应用程序自定义它的行为去迎合用户的喜好.你可以在程序运行的时候从用户默认的数据库中读取程序的设置.同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作.可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步. NSUserDefa

IOS NSUserDefaults 讲解 用法

IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯. 因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了. NSUserDefaults支持的数据格

iOS之NSUserDefaults的用法

NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯. 因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了. NSUserDefaults支持的数据格式有:NSNumber(Integer.Float

iOS开发学习-NSUserDefaults的介绍和用法

NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等.默认系统允许应用程序自定义它的行为去迎合用户的喜好.你可以在程序运行的时候从用户默认的数据库中读取程序的设置.同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作.可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步. NSUserDefaults类提供了非常方便的方法来获取常用的类

NSUserDefaults 的用法

NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息.因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了. 该数据实际上是以“键值对”形式保存的(类似于NSDictionary),因此我们需要通过key来读取或者

IOS中NSUserDefaults的用法(轻量级本地数据存储) (转)

NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯. 因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了. NSUserDefaults支持的数据格式有:NSNumber(Integer.Float

iOS-NSDictionary/NSMutableDictionary新用法之“是”与”否“,开关控制器,NSUserDefaults 简单开关应用。

iAronTalk Blog opens.  Not matter of the today will drag tomorrow. -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- NSDictionary(字典)是Objective-C中用于"集合"数据,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.同

AppDelegate的科幻用法

学习总是一个循序渐进的过程,刚开始的时候知道的东西少,当遇到一个需求时会绞尽脑汁来想怎么来实现,而随着学习的不断深入,了解的东东越来越多,再遇到一个需求的时候总会瞬间有多个解决文案,这时候的问题就是选一个最佳的解决文案.好像扯远了,还是说说一直觉得不起眼没研究过的AppDelegate吧. 说没研究过也不对,像应用的起动过程,各个代理的执行顺序,注册推送事件获取推送信息,打开URL啥的,都反复研究过,这次要说的科幻用法主要是指:"delegate".只是突然一下思路开阔的由感而发.下面