今天做app的引導圖時,要用到輕量級數據的存儲,所以行到了NSUserDefaults.他是繼承于NSObject的一個UIKit框架下的一個類.專門用來存儲輕量級的本地數據存儲,存儲用戶的偏好設置,例如用戶的密碼,賬號名等.今天做的后面就用到了它去存儲版本的號,用它來判斷app用戶是否是第一次安裝或更新.注意:它是一個輕量級的存儲數據的類,不要將的比較大的數據用它來存儲,不然你會直接面臨xcode的crash哦.可以建議用數據庫哦!其實它把數據存儲到程序沙盒的/Library/prefereces下個plist文件,他就是存儲我們NSUserDefaults的地方
它可以寫入很多類型的數據,支持的的數據類型:NSNumber,NSString,NSArray,NSDictionary,BOOL,float,double,URL,NSInteger,NSData
+(NSUserDefaults *)standardUserDefaults;這是它的便利構造器的寫法.可以初始化一個實例對象.我們把用他的實例來存儲數據.單例對象
(instancetype);初始化方法.
(void)setObject:(id)value forKey:(NSString *)defaultName;寫入數據,第一個參數是寫入數據的值,第二個參數為寫入數據時值對應的鍵
(void)objectForKey:(NSString *)defaultName;讀出數據.參數為要讀出數據的對應的鍵
(void)removeObjectForKey:(NSString *)defaultName;刪除存儲的對應鍵的數據
(NSString *)stringForKey:(NSString *)defaultName;讀取NSString類型的數值
(NSArray *)arrayForKey:(NSString *)defaultName;讀取NSArray類型的數值
(NSDictionary *)dictionaryForKey:(NSString *)defaultName;讀取NSDictionary類型的數值
(NSData *)dataForKey:(NSString *)defaultName;讀取NSData類型的數值
(NSInteger)integerForKey:(NSString *)defaultName;讀取NSInteger類型的數值
(float)floatForKey:(NSString *)defaultName;讀取float類型的數值
(double)doubleForKey:(NSString *)defaultName;讀取double類型的數值
(BOOL)boolForKey:(NSString *)defaultName;讀取BOOL類型的數值
(NSURL *)URLForKey:(NSString *)defaultName;讀取NSURL類型的數值
下面介紹寫入數值(void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;寫入NSInteger類型的數值
(void)setFloat:(float)value forKey:(NSString *)defaultName;寫入float類型的數值
(void)setDouble:(double)value forKey:(NSString *)defaultName;寫入double類型的數值
(void)setBoll:(BOOL)value forKey:(NSString *)defaultName;寫入BOOL類型的數值
(void)setURL:(NSURL *)url forKey:(NSString *)defaultName;寫入NSURL類型的數值
接下來說說其他用法(void)resetStandardUserDefaults;同步更新存儲的數據,并釋放內存中的值
(void)synchronize;將持久域存儲數據同步存儲到磁盤,且將磁盤中沒有同步更新的數值更新.此方法是周期調用,如果想要其他操作,課手動調用
(NSDictionary *)persistentDomainForName;(NSString *)domainName;返回一個特定持久域的鍵值對
(NSArray *)persistentDomainNames;返回當前持久域的名字
(void)removeVolatileDomainName:(NSString *)domainName;刪除一個持久域
(void)setPersistentDomain:(NSString *)domain for:(NSString *)domainName;設置持久域
基本用法已經介紹完,下面今天我用它的代碼:-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColorwhiteColor];
[self.windowmakeKeyAndVisible];//初始化一個實例對象(單例)
NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];
//獲取到info plist文件的字典(具體位置:工程->targets->info->Custom iOS Target Properties)
NSDictionary *infoDictionary = [[NSBundlemainBundle]infoDictionary];
//獲得啟動當前app的簡短版本號
NSString *appVersion = [infoDictionaryobjectForKey:@"CFBundleShortVersionString"];
//讀取NSUserDefaults存儲的app版本號
NSString *oldVersion = [defaultsstringForKey:@"appVersion"];
//判斷是存出的和當前的版本號是否相同
if ([appVersionisEqualToString:oldVersion]) {
//如果相同,直接進入根控制器
RootViewController *rootVC = [[RootViewControlleralloc]init];
UINavigationController *navigationVC = [[UINavigationControlleralloc]initWithRootViewController:rootVC];
self.window.rootViewController = navigationVC;
}else{
//如果不相同,進入引導視圖控制器
LeadViewController *leadVC = [[LeadViewControlleralloc]init];
self.window.rootViewController = leadVC;
//再將當前的版本號存儲
[defaultssetObject:appVersionforKey:@"appVersion"];
}return YES;
}