通過NSUserDefaults做歡迎頁顯示機(jī)制/版本號控制
歡迎頁的機(jī)制:
- 首次運(yùn)行時(shí),顯示歡迎頁. 看過以后,再次運(yùn)行則直接進(jìn)入主頁面,跳過歡迎頁.
- 升級之后,首次運(yùn)行,顯示歡迎頁. 再次運(yùn)行則直接進(jìn)入主頁面,跳過歡迎頁.
解決方案: 通過NSUserDefaults保存當(dāng)前的版本號, 每次運(yùn)行時(shí), 檢查這個(gè)保存的版本號與當(dāng)前系統(tǒng)版本號是否一致.
- 首次運(yùn)行時(shí), 獲取plist中的版本號, 一定是nil的. 那么顯示歡迎頁, 進(jìn)入到主頁面以后, 把當(dāng)前系統(tǒng)版本號存入.
- 當(dāng)升級時(shí), 獲取plist的版本號與當(dāng)前版本號對比,如果不一樣,則表示版本有變動, 則顯示歡迎頁. 進(jìn)入主頁以后, 同步當(dāng)前版本號因?yàn)閣indow的根視圖控制器,需要根據(jù)實(shí)際情況發(fā)生變化, 通過storyboard啟動無法滿足. 必須使用代碼操作.
版本號
- version 發(fā)布版本號,是給用戶看的
- build 測試版本號,用于發(fā)布之前的版本迭代區(qū)分的, 上傳APPStore使用
從info.plist中獲取版本號
//獲取info.plist文件
NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
//通過打印, 查看key-value組合, 獲取版本號
NSString *versionNumber = infoDic[@"CFBundleShortVersionString"];
通過對比已運(yùn)行版本號和當(dāng)前系統(tǒng)版本號決定展示的界面
//2.獲取已經(jīng)運(yùn)行過的版本號
NSString *runVersionNumber = [[NSUserDefaults standardUserDefaults] objectForKey:kRunVersion];
id vc = nil;
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
if (runVersionNumber == nil || ![runVersionNumber isEqualToString:versionNumber]) {
//顯示歡迎頁
vc = [sb instantiateInitialViewController];
}else{
//主頁面
vc = [sb instantiateViewControllerWithIdentifier:@"MainViewController"];
}
self.window.rootViewController = vc;
獲取當(dāng)前AppDelegate實(shí)例對象指針
//設(shè)置當(dāng)前版本號為已運(yùn)行版本號
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:versionKey];
[[NSUserDefaults standardUserDefaults] setObject:version forKey:kRunVersion];