NSUserDefaults的一些用法
NSUserDefaults是一個單例,整個程序中只有一個實例化對象。
NSUserDefaults支持的數據類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL。
不支持自定義的Model類型。
如保存一個NSString的數據,可以用
讀取數據時,用
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類,
若要將User轉化為NSData,就需要遵守NSCoding協議 ,在.m中實現encodeWithCoder和
initWithCoder方法。
所以修改如下:
在.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];?
轉載于:https://www.cnblogs.com/Apologize/p/4564153.html
總結
以上是生活随笔為你收集整理的NSUserDefaults的一些用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 23、List集合
- 下一篇: leetcode 222 Count