iOS項(xiàng)目拆分:數(shù)據(jù)本地持久化(1)

在這里本人將以往做過的項(xiàng)目一一做了總結(jié)潘悼,并且拆分成一個(gè)個(gè)細(xì)小的功能模塊(這里不包括UI界面搭建)律秃,封裝抽類成一個(gè)個(gè)獨(dú)立的功能。會(huì)把涉及到的功能點(diǎn)和知識點(diǎn)做詳細(xì)的注釋治唤,便于理解友绝、學(xué)習(xí)、使用肝劲。

重要數(shù)據(jù)本地存儲

重要數(shù)據(jù)這里所要說的是用戶數(shù)據(jù),包含用戶相關(guān)信息郭宝,以便用戶操作APP辞槐,前端和服務(wù)器的數(shù)據(jù)交互。 數(shù)據(jù)本地持久化(所謂的持久化粘室,就是將數(shù)據(jù)保存到硬盤中榄檬,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問之前保存的數(shù)據(jù))方式:

  • 寫入本地文件(plist文件)</br>
  • NSUserDefaults(Preference偏好設(shè)置)</br>
  • NSKeyedArchiver(歸檔) </br>
  • coreData </br>* sqlite3 </br>
  • FMDB(FMDB是S對qlite數(shù)據(jù)庫的封裝)</br>
    這里主要講解用戶信息數(shù)據(jù)寫本地文件(plist文件)

    1.創(chuàng)建單例,在單例里面將數(shù)據(jù)存入沙盒文件中
#import <Foundation/Foundation.h>
@class UserModel;
@interface UserManager : NSObject
// 用戶信息
@property (nonatomic, strong) UserModel * activeUser;
/** * 單例 
* @return 實(shí)例對象 
*/
+ (instancetype)shareManager ;
/** 
* 沙盒保存用戶信息 
* @param responseObject 服務(wù)器返回的用戶數(shù)據(jù)
 * @param errorMessage 錯(cuò)誤信息
 * @return 是否保存成功 */
- (BOOL)saveWithResponseObjectAsUserInfo:(NSDictionary *)responseObject withErrorMessage:(NSString *)errorMessage ;
@end
#import "UserManager.h"
#import "UserModel.h"
@implementation UserManager
/** 
* 單例 
* * @return 實(shí)例對象 
*/
static UserManager * defualt_shareMananger = nil;
+ (instancetype)shareManager {  
      static dispatch_once_t onceToken;
      _dispatch_once(&onceToken, ^{
      if (defualt_shareMananger == nil) {
      defualt_shareMananger = [UserManager new]; 
  } });
 return defualt_shareMananger;
}
#pragma mark - 沙盒存儲-寫本地
/**
 * 沙盒保存用戶信息 *
 * @param responseObject 服務(wù)器返回的用戶數(shù)據(jù) 
* @param errorMessage 錯(cuò)誤信息 * 
* @return 是否保存成功 */
- (BOOL)saveWithResponseObjectAsUserInfo:(NSDictionary *)responseObject withErrorMessage:(NSString *)errorMessage {  
        if (!isNULL(responseObject)) {
         // 獲取到存儲路徑
         NSString *filePath = [self documentFilePathWithUserInfo]; 
        // 用戶信息轉(zhuǎn)化 UserModel * userInfo = [UserModel                 mj_objectWithKeyValues:responseObject]; 
       // 判斷用戶是否正常登陸 if (userInfo.auth_token.length == 0 ||          userInfo.userID.length == 0) {  if (errorMessage != NULL) { errorMessage = @"登錄失敗"; return NO;
 } }
     // 將數(shù)據(jù)寫入沙盒
     BOOL result = [responseObject writeToFile:filePath atomically:YES]; 
    if (result) { if (errorMessage != NULL) errorMessage = @"登錄成功";
       return YES;  
      }else {  
      if (errorMessage != NULL) errorMessage = @"登錄失敗"; return NO;
     }  }else { 
     if (errorMessage != NULL) errorMessage = @"登錄失敗"; return NO;
 }}
    /** * 沙盒路徑 * 
    * @return 
    */
- (NSString *)documentFilePathWithUserInfo {
 // 一、獲取到當(dāng)前的Document文件夾的路徑 
 // 1衔统、NSSearchPathDirectory directory 第一個(gè)參數(shù):我們要顯示的文件夾是哪一個(gè) 
 // 2鹿榜、NSSearchPathDomainMask domainMask 第二個(gè)參數(shù):是在哪個(gè)域(用戶權(quán)限)下面 
 // 3海雪、BOOL expandTilde 第三個(gè)參數(shù) :預(yù)留參數(shù) 
 NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
 // 將前面的路徑格式和后面的普通的字符串格式鏈接在一起,并且以路徑格式返回舱殿。 
NSString * filePath = [documentPath stringByAppendingPathComponent:@"userInfo"]; return filePath;}
/**
 * 當(dāng)前用戶 *
 * @return <#return value description#> 
*/
- (UserModel *)activeUser {
    if (_activeUser != nil) {  return _activeUser;
 } 
// 獲取數(shù)據(jù)存儲路徑
   NSString *filePath = [self documentFilePathWithUserInfo]; 
// 查詢數(shù)據(jù)是否存在 
  BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
   if   (isExist) {
 // 取出數(shù)據(jù)
 NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
  if (dic) { 
  UserModel * userModel = [UserModel mj_objectWithKeyValues:dic];
   if (userModel) {
     _activeUser = userModel;
     } } 
    return _activeUser; 
    }else {
     return nil;
   }}
@end

2.在APP登錄后奥裸,服務(wù)器會(huì)將對應(yīng)的用戶數(shù)據(jù)返回給你,這時(shí)需要調(diào)用沙盒存儲方法沪袭,把用戶數(shù)據(jù)存儲到本地湾宙,以便用戶的其他操作。
其他的持久化方式也會(huì)一一介紹其用法和用途冈绊,可以繼續(xù)關(guān)注這個(gè)博客專欄侠鳄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市死宣,隨后出現(xiàn)的幾起案子伟恶,更是在濱河造成了極大的恐慌,老刑警劉巖毅该,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博秫,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃骂,警方通過查閱死者的電腦和手機(jī)台盯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畏线,“玉大人静盅,你說我怎么就攤上這事∏夼梗” “怎么了蒿叠?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚣常。 經(jīng)常有香客問我市咽,道長,這世上最難降的妖魔是什么抵蚊? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任施绎,我火速辦了婚禮,結(jié)果婚禮上贞绳,老公的妹妹穿的比我還像新娘谷醉。我一直安慰自己,他們只是感情好冈闭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布俱尼。 她就那樣靜靜地躺著,像睡著了一般萎攒。 火紅的嫁衣襯著肌膚如雪遇八。 梳的紋絲不亂的頭發(fā)上矛绘,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音刃永,去河邊找鬼货矮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛揽碘,可吹牛的內(nèi)容都是我干的次屠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼雳刺,長吁一口氣:“原來是場噩夢啊……” “哼劫灶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掖桦,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤本昏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枪汪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涌穆,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年雀久,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宿稀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赖捌,死狀恐怖祝沸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情越庇,我是刑警寧澤罩锐,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卤唉,受9級特大地震影響涩惑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桑驱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一竭恬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熬的,春花似錦萍聊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽此衅。三九已至强戴,卻和暖如春亭螟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骑歹。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工预烙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人道媚。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓扁掸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親最域。 傳聞我的和親對象是個(gè)殘疾皇子谴分,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 嗯,你們要的大招镀脂。跟著這篇文章一起也發(fā)布了CTPersistance[https://github.com/...
    HeartPower閱讀 517評論 0 4
  • 在程序開發(fā)中牺蹄,數(shù)據(jù)層永遠(yuǎn)是程序的核心結(jié)構(gòu)之一。我們將現(xiàn)實(shí)事物進(jìn)行抽象薄翅,使之變成一個(gè)個(gè)數(shù)據(jù)沙兰。對這些數(shù)據(jù)的加工處理是代...
    sindri的小巢閱讀 16,831評論 13 85
  • 在程序開發(fā)中,數(shù)據(jù)層永遠(yuǎn)是程序的核心結(jié)構(gòu)之一翘魄。我們將現(xiàn)實(shí)事物進(jìn)行抽象鼎天,使之變成一個(gè)個(gè)數(shù)據(jù)。對這些數(shù)據(jù)的加工處理是代...
    帥不過oneS閱讀 607評論 0 1
  • 事件函數(shù)傳遞參數(shù)。 網(wǎng)上看了一些關(guān)于事件函數(shù)傳參的決解方法光羞,感覺很亂绩鸣。自己想了一種。還可以吧 因?yàn)镮E8不支持bi...
    strong9527閱讀 246評論 0 0
  • 以往沒有注意過這個(gè)節(jié)日纱兑,今年似乎有點(diǎn)特殊呀闻,當(dāng)了媽媽之后,第一次覺得自己很棒潜慎,我養(yǎng)自己的兒子捡多,并且養(yǎng)的很好。 這幾天...
    雙胞胎媽媽_9a17閱讀 221評論 0 0