NSUserDefaults适合存储轻量级本地数据,比如要保存用户登陆的用户名、密码,使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。
NSUserDefaults,读取方便,容易。下面给出一个示例看看如何使用:
- //保存数据到NSUserDefaults
- -(void)saveNSUserDefaults
- {
-
NSString *myString = @"enuola"; -
int myInteger = 100; -
float myFloat = 50.0f; -
double myDouble = 20.0; -
NSDate *myDate = [NSDate date]; -
NSArray *myArray = [NSArray arrayWithObjects:@"hello", @"world", nil]; -
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"enuo", @"20", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", nil]]; -
-
//将上述数据全部存储到NSUserDefaults中 -
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; -
//存储时,除NSNumber类型使用对应的类型外,其他的都是使用setObject:forKey: -
[userDefaults setInteger:myInteger forKey:@"myInteger"]; -
[userDefaults setFloat:myFloat forKey:@"myFloat"]; -
[userDefaults setDouble:myDouble forKey:@"myDouble"]; -
-
[userDefaults setObject:myString forKey:@"myString"]; -
[userDefaults setObject:myDate forKey:@"myDate"]; -
[userDefaults setObject:myArray forKey:@"myArray"]; -
[userDefaults setObject:myDictionary forKey:@"myDictionary"]; -
-
//这里建议同步存储到磁盘中,但是不是必须的 -
[userDefaults synchronize]; - }
- //从NSUserDefaults中读取数据
- -(void)readNSUserDefaults
- {
-
NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults]; -
-
//读取数据到各个label中 -
//读取整型int类型的数据 -
NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"]; -
txtInteger.text = [NSString stringWithFormat:@"%d",myInteger]; -
-
//读取浮点型float类型的数据 -
float myFloat = [userDefaultes floatForKey:@"myFloat"]; -
txtFloat.text = [NSString stringWithFormat:@"%f",myFloat]; -
-
//读取double类型的数据 -
double myDouble = [userDefaultes doubleForKey:@"myDouble"]; -
txtDouble.text = [NSString stringWithFormat:@"%f",myDouble]; -
-
//读取NSString类型的数据 -
NSString *myString = [userDefaultes stringForKey:@"myString"]; -
txtNSString.text = myString; -
-
//读取NSDate日期类型的数据 -
NSDate *myDate = [userDefaultes valueForKey:@"myDate"]; -
NSDateFormatter *df = [[NSDateFormatter alloc] init]; -
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; -
txtNSDate.text = [NSString stringWithFormat:@"%@",[df stringFromDate:myDate]]; -
-
//读取数组NSArray类型的数据 -
NSArray *myArray = [userDefaultes arrayForKey:@"myArray"]; -
NSString *myArrayString = [[NSString alloc] init]; -
for(NSString *str in myArray) -
{ -
NSLog(@"str= %@",str); -
myArrayString = [NSString stringWithFormat:@"%@ %@", myArrayString, str]; -
[myArrayString stringByAppendingString:str]; - //
[myArrayString stringByAppendingFormat:@"%@",str]; -
NSLog(@"myArrayString=%@",myArrayString); -
} -
txtNSArray.text = myArrayString; -
-
//读取字典类型NSDictionary类型的数据 -
NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"]; -
NSString *myDicString = [NSString stringWithFormat:@"name:%@, age:%d",[myDictionary valueForKey:@"name"], [[myDictionary valueForKey:@"age"] integerValue]]; -
txtNSDictionary.text = myDicString; - }
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults,想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。
使用NSUserDefaults保存自定义对象
自定义对象:
.h文件
- #import
-
- @interface
MyObject : NSObject - {
-
NSNumber* lowValue; -
NSNumber* highValue; -
-
NSString* titleString; - }
- @property(nonatomic,
retain)NSNumber* lowValue; - @property(nonatomic,
retain)NSNumber* highValue; -
- @property(nonatomic,
retain)NSString* titleString; - @end
.m文件:
- #import
"MyObject.h" -
- @implementation
MyObject - @synthesize
lowValue, highValue, titleString; - -
(void)encodeWithCoder:(NSCoder *)encoder - {
-
[encoder encodeObject:self.lowValue forKey:@"lowValue"]; -
[encoder encodeObject:self.highValue forKey:@"highValue"]; -
[encoder encodeObject:self.titleString forKey:@"titleString"]; - }
- -
(id)initWithCoder:(NSCoder *)decoder - {
-
if(self = [super init]) -
{ -
self.lowValue = [decoder decodeObjectForKey:@"lowValue"]; -
self.highValue = [decoder decodeObjectForKey:@"highValue"]; -
self.titleString = [decoder decodeObjectForKey:@"titleString"]; -
} -
return self; - }
-
- @end
保存单个MyObject方法:
- -
(void)saveCustomObject:(MyObject *)obj - {
-
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObje ct:obj]; -
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; -
[defaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"]; - }
- -
(MyObject *)loadCustomObjectWithKey:(NSString *)key - {
-
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; -
NSData *myEncodedObject = [defaults objectForKey:key]; -
MyObject *obj = (MyObject *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject]; -
return obj; - }
-
- 保存:
-
MyObject* testObj = [[MyObject alloc] init]; -
testObj.lowValue =[NSNumber numberWithFloat:122.2 ]; -
testObj.highValue = [NSNumber numberWithFloat:19888 ]; -
testObj.titleString = @“baoyu”; -
- 读取:
-
MyObject* obj = [self loadCustomObjectWithKey:@"myEncodedObjectKey"]; -
NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString);
保存多个MyObject方法:
- 保存:
-
NSMutableArray* array = [[NSMutableArray alloc] init]; -
for(int i=0; i<<span class="number" style="color: rgb(192, 0, 0);">3; i++) -
{ -
MyObject* testObj = [[MyObject alloc] init]; -
testObj.lowValue =[NSNumber numberWithFloat:122.2+i ]; -
testObj.highValue = [NSNumber numberWithFloat:19888+i ]; -
testObj.titleString = [NSString stringWithFormat:@"BAOYU%d", i]; -
-
[array addObject:testObj]; -
-
} -
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObje ct:array] forKey:@"myarray"]; -
-
- 读取:
-
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myarray"]; -
-
-
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; -
for(MyObject* obj in oldSavedArray) -
{ -
NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString); -
}