iOS存儲數據字典到沙盒

来源:http://www.cnblogs.com/ithongjie/archive/2016/03/25/5320489.html
-Advertisement-
Play Games

1.創建一個賬號數據模型 用來存放從伺服器返回的數據,一般返回的是一個字典,裡面包含了這個登陸用戶的各種信息,這個數據模型就是用來存放這些東西的 創建一個數據模型 YYCAccount 繼承 NSObject 註意要遵守<NSCoding>協議 YYCAccount.h文件中代碼 這裡面欄位根據返回 ...


1.創建一個賬號數據模型 用來存放從伺服器返回的數據,一般返回的是一個字典,裡面包含了這個登陸用戶的各種信息,這個數據模型就是用來存放這些東西的

創建一個數據模型  YYCAccount 繼承 NSObject   註意要遵守<NSCoding>協議

YYCAccount.h文件中代碼 這裡面欄位根據返回的數據寫,一般寫能用的上的就行了,不需要的不用寫

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface YYCAccount : NSObject <NSCoding>
 4 /**
 5  *  用戶ID
 6  */
 7 @property (nonatomic, assign) int uid;
 8 /**
 9  *  用戶姓名
10  */
11 @property (nonatomic, copy) NSString *name;
12 /**
13  *  手機號
14  */
15 @property (nonatomic, copy) NSString *tel;
16 /**
17  *  出生日期
18  */
19 @property (nonatomic, copy) NSString *birthday;
20 /**
21  *  性別
22  */
23 @property (nonatomic, copy) NSString *sex;
24 /**
25  *  圖片存放目錄
26  */
27 @property (nonatomic, copy) NSString *category;
28 /**
29  *  用戶密碼
30  */
31 @property (nonatomic, copy) NSString *password;
32 /**
33  *  優惠券數量
34  */
35 @property (nonatomic, assign) int counum;
36 /**
37  *  愛牙指數
38  */
39 @property (nonatomic, assign) int level;
40 /**
41  *  圖片名稱
42  */
43 @property (nonatomic, copy) NSString *filename;
44 
45 /**
46  *  積分
47  */
48 @property (nonatomic, assign) int integral;
49 /**
50  *  簽到總天數
51  */
52 @property (nonatomic, assign) int alldays;
53 
54 /**
55  *  上次簽到時間
56  */
57 @property (nonatomic, copy) NSString *lastCheckinTime;
58 
59 
60 /**
61  *  用來載入字典 賬戶信息
62  *
63  *  @param dict <#dict description#>
64  *
65  *  @return <#return value description#>
66  */
67 +(instancetype)AccountStatusWithDict: (NSDictionary *)dict;
68 
69 
70 
71 @end
View Code

YYCAccount.m文件中代碼 主要是歸檔 和反歸檔兩個方法,註意存儲類型要和數據類型一致  還有一個載入字典賬戶信息的方法要實現

#import "YYCAccount.h"

@implementation YYCAccount

+(instancetype)AccountStatusWithDict:(NSDictionary *)dict
{
    YYCAccount *account=[[self alloc]init];
    account.uid=[dict[@"uid"] intValue];
    account.name=dict[@"name"];
    account.tel=dict[@"tel"];
    account.birthday=dict[@"birthday"];
    account.filename=dict[@"filename"];

    account.counum=[dict[@"counum"] intValue];
    account.level=[dict[@"level"] intValue];
    account.integral=[dict[@"integral"] intValue];
    account.alldays=[dict[@"alldays"] intValue];
    account.lastCheckinTime=dict[@"lastCheckinTime"];
    


    return account;
}

/**
 *  當一個對象要歸檔進沙盒的時候就會調用  歸檔
 *  目的,在這個方法中說明這個對象的哪些屬性寫進沙盒
 *  @param encoder <#encoder description#>
 */
-(void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeInt:self.uid forKey:@"uid"];
    [encoder encodeObject:self.name forKey:@"name"];
    [encoder encodeObject:self.tel forKey:@"tel"];
    [encoder encodeObject:self.birthday forKey:@"birthday"];

    [encoder encodeInteger:self.counum forKey:@"counum"];
    [encoder encodeInteger:self.level forKey:@"level"];
    [encoder encodeInteger:self.integral forKey:@"integral"];
    [encoder encodeInteger:self.alldays forKey:@"alldays"];
    [encoder encodeObject:self.lastCheckinTime forKey:@"lastCheckinTime"];
    [encoder encodeObject:self.filename forKey:@"filename"];
//
}

/**
 *  反歸檔 的時候會調用這個方法  解檔
 *  目的:在這個方法中說明這個對象的哪些屬性從沙河中解析出來
 從沙河中解析對象 反歸檔會調用這個方法 需要解析哪些屬性
 *  @param decoder <#decoder description#>
 *
 *  @return <#return value description#>
 */
-(instancetype)initWithCoder:(NSCoder *)decoder
{
    if (self=[super init]) {
        self.uid=[decoder decodeIntForKey:@"uid"];
        self.name=[decoder decodeObjectForKey:@"name"];
        self.tel=[decoder decodeObjectForKey:@"tel"];
        self.birthday=[decoder decodeObjectForKey:@"birthday"];

        self.counum=[decoder decodeIntForKey:@"counum"];
        self.level=[decoder decodeIntForKey:@"level"];
        self.integral=[decoder decodeIntForKey:@"integral"];
        self.alldays=[decoder decodeIntForKey:@"alldays"];
        self.lastCheckinTime=[decoder decodeObjectForKey:@"lastCheckinTime"];
        self.filename=[decoder decodeObjectForKey:@"filename"];
        
    }
    return self;
}


@end
View Code

2.創建一個賬號存儲工具類  YYCAccountTool 繼承 NSObject   導入數據模型YYCAccount的頭文件

處理賬號相關的所有操作的工具類 存儲賬號、取出賬號、驗證賬號

YYCAccountTool工具類的.h文件代碼

 1 #import <Foundation/Foundation.h>
 2 #import "YYCAccount.h"
 3 @interface YYCAccountTool : NSObject
 4 /**
 5  *  存儲賬號信息
 6  *
 7  *  @param account 賬號模型
 8  */
 9 +(void)saveAccount:(YYCAccount *)account;
10 
11 /**
12  *  返回賬號信息
13  *
14  *  @return 賬號模型(如果賬號過期,我們會返回nil)
15  */
16 +(YYCAccount *)account;
17 
18 /**
19  *  刪除賬號信息
20  *
21  *  @return <#return value description#>
22  */
23 +(BOOL)deleteAccount;
24 
25 
26 
27 @end
View Code

YYCAccountTool工具類的.m文件代碼   註意賬號信息存儲路徑 寫成了一個巨集,最後面是文件的名字,自己隨意,一般都這樣寫沒關係

 1 #import "YYCAccountTool.h"
 2 
 3 //賬號信息存儲路徑
 4 #define YYCAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.archive"]
 5 
 6 
 7 @implementation YYCAccountTool
 8 /**
 9  *  存儲賬號信息
10  *
11  *  @param account 賬號模型
12  */
13 +(void)saveAccount:(YYCAccount *)account
14 {
15     
16     //將一個對象寫入沙盒 需要用到一個NSKeyedArchiver 自定義對象的存儲必須用這個
17     [NSKeyedArchiver archiveRootObject:account toFile:YYCAccountPath];
18 }
19 
20 /**
21  *  返回賬號信息
22  *
23  *  @return 賬號模型(如果賬號過期,我們會返回nil)
24  */
25 +(YYCAccount *)account
26 {
27     //載入模型
28     YYCAccount *account=[NSKeyedUnarchiver unarchiveObjectWithFile:YYCAccountPath];
29     
30     return account;
31     
32 }
33 
34 /**
35  *  刪除賬號信息
36  *
37  *  @return <#return value description#>
38  */
39 +(BOOL)deleteAccount
40 {
41     return [[NSFileManager defaultManager] removeItemAtPath:YYCAccountPath error:nil];
42     
43 }
44 
45 
46 
47 
48 
49 @end
View Code

 

3.當我們的使用的使用的時候怎麼使用呢?

存儲數據  用一個字典接收伺服器返回的數據 是一個字典

 NSDictionary *data=dict[@"data"];

 將返回的數據存進沙盒  這種方法必須是返回的data里的信息全都有值 為空的會崩,要判斷一下

  將返回的賬戶數據存進沙盒  應該將返回的字典數據轉為模型 再存進沙盒

//轉化為數據模型  直接調用數據模型里的載入字典的那個方法即可

 YYCAccount *account=[YYCAccount AccountStatusWithDict:data];

//存儲賬號信息  直接導入賬號工具類的頭文件直接這樣寫即可:

 [YYCAccountTool saveAccount:account];

 

獲取賬號信息  

//獲取用戶信息賬號模型

//YYCAccount *account=[YYCAccountTool account];

 想要什麼數據就直接account.就出來了

 

//刪除所有賬戶信息  退出登錄的時候執行的操作

 [YYCAccountTool deleteAccount];

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 89:~ zhangwenquan$ 89:~ zhangwenquan$ openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus ........ ...
  • 我想題目說的或許不是很清楚,那麼現在我詳細介紹一下這篇隨筆內容。 在外部無法改變UIVIew控制項的size。 這裡說是UIView,但是事實上,是大多數控制項而絕非僅UIView。 想要實現在外部無法改變size該怎麼做呢。 首先是重寫setFrame使其規定本身size,如下 重寫setFrame後 ...
  • 上一章講述了Android界面開發中的Widget,Service,BroadcastReceiver基本知識點,本章以一個實際案例-後臺音樂播放器解析各個知識點之間的關係。 1.功能需求 做一個Android音樂播放器 用到Service、Broadcast Receiver、Widget 使用後 ...
  • 使用AndroidStudio開發半年了,一路爬坑至今,剛由Windows轉mac一個星期。通過查些資料和自己摸索,記錄一些常用的快捷鍵,猶豫個人不喜歡改快捷鍵,所以都是原生的。特此分享給大家!歡迎補充~ 搜索、查看相關: com + O :類搜索 com + shift + O:文件搜索 com ...
  • 代碼在下麵,來自Q群.125311931 https://github.com/slodier/-QQ-/tree/master/%E7%B1%BB%E4%BC%BCQQ%E5%88%97%E8%A1%A8 ...
  • 這是從美團弄得xml文件,地區和經緯度。 你點了地區以後 , 就可以查看經緯度 ,因為筆者懶, 有現成的文本框 , 所有偷懶了。 下麵是一些枯燥的代碼了 。 ...
  • iOS9之後,預設網路請求是https,所有我們要設置一下網路安全,具體設置如下 1.第三方類庫 XMLDictionary 下載地址: https://github.com/nicklockwood/XMLDictionary 所用到的xml文件 http://www.meituan.com/ap ...
  • 輸入網址,解出源碼,顯示label 我這裡是在第二個界面顯示的,用的屬性傳值。 A界面先從 storyboard 拖個 textfield 和一個 button .m裡面button的方法 B界面定義一個string用於接收 .m ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...