亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

NSUserDefaults 簡介,使用 NSUserDefaults 存儲自定義對象

2019-11-09 15:02:51
字體:
來源:轉載
供稿:網友
摘要: NSUserDefaults適合存儲輕量級的本地數據,一些簡單的數據(NSString類型的)例如密碼,網址等,NSUserDefaults肯定是首選,但是如果我們自定義了一個對象,對象保存的是一些信息,這時候就不能直接存儲到NSUserDefaults了

一、了解NSUserDefaults以及它可以直接存儲的類型

      NSUserDefaults是一個單例,在整個程序中只有一個實例對象,他可以用于數據的永久保存,而且簡單實用,這是它可以讓數據自由傳遞的一個前提,也是大家喜歡用它保存簡單數據的一個主要原因。     

      使用 NSUserDefaults 存儲自定義對象的最初,我們必須認識NSUserDefaults可以存儲哪一些類型的數據,下面一一列出:

NSUserDefaults支持的數據類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

        如果想要將上述數據類型的數據永久保存到NSUserDefaults中去,只需要簡單的操作(一個Value 一個Key ),例如,想要保存一個NSString的對象,代碼實現為:

    //將NSString 對象存儲到 NSUserDefaults 中    NSString *passWord = @"1234567";    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    [user setObject:passWord forKey:@"userPassWord"];

    將數據取出也很簡單,只需要取出key 對應的值就好了,代碼如下:

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    NSString *passWord = [ user objectForKey:@"userPassWord"];

注意:對相同的Key賦值約等于一次覆蓋,要保證每一個Key的唯一性

值得注意的是:

        NSUserDefaults 存儲的對象全是不可變的(這一點非常關鍵,弄錯的話程序會出bug),例如,如果我想要存儲一個 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:@"記住存放的一定是不可變的"]];

二、使用 NSUserDefaults 存儲自定義對象

1、將自定義類型轉換為NSData類型

      當數據重復而且多的時候(例如想存儲全班同學的學號,姓名,性別(這個數據量可能太大了 )),如果不用SQLite 存儲 (多數據最好還是用這個),你可以選擇使用歸檔,再將文件寫入本地,但是這種方式和 NSUserDefaults 比起來麻煩多了(因為NSFileManage 本來就挺復雜) ,但是問題是,NSUserDefaults 本身不支持自定義對象的存儲,不過它支持NSData的類型,下面舉一個例子來介紹。

我們先建立一個叫Student 的類,這個類里有三個屬性(學號,姓名,性別),如圖:

我們要做的就是將Student類型變成NSData類型 ,那么就必須實現歸檔:

這里要實現 在.h 文件中申明 NSCoding 協議,再 在 .m 中實現 encodeWithCoder 方法 和 

initWithCoder 方法就可以了 : 

.h 中修改文件如圖 :

.m中加入代碼 :

這樣做就可以將自定義類型轉變為NSData類型了

2、將自定義類型數據存入 NSUserDefaults 中

    如果要存儲全班同學的信息,我們可以建一個NSMutableArray 來存放全班同學的信息(里面存儲的全是NSData對象)在需要存儲的地方加入代碼:

//首先,要建立一個可變數組來存儲 NSDate對象     Student *student = [[Student alloc] ini];         //下面進行的是對student對象的 name , studentNumber ,sex 的賦值    student.name = @"lady-奕奕";    student.studentNumber = @"3100104006";    student.sex = @"女";        //這是一個存放全班同學的數組    NSMutableArray * dataArray = [NSMutableArray arrayWithCapacity:50];        //將student類型變為NSData類型    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];        //存放數據的數組將data加入進去    [dataArray addObject:data];

如果你只想存一個人的信息,你可以直接將NSData存入NSUserDefaults中 :

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];           NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    [user setObject:data forKey:@"oneStudent"];

如果你想存儲全班同學的信息,你還要用一個for循環將data 放入 dataArray中,這里具體的操作就不實現了,只給出存放的代碼:

   //記住要轉換成不可變數組類型    NSArray * array = [NSArray arrayWithArray:dataArray];        NSUserDefaults *user = [NSUserDefaults standardUserDefaults];    [user setObject:array forKey:@"allStudent"];

從NSUserDefaults中取出數據在還原也很簡單

例如還原一個學生的數據:

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];  NSdData *data = [user objectForKey:@"oneStudent"];     Student *student = [NSKeyedUnarchiver unarchiveObjectWithData:data];

總之,NSUserDefaults 在我們編寫代碼中是最常用的一個永久保存數據的方法,也是最簡單的。

? 著作權歸作者所有分類:ios實戰 字數:1233標簽: NSUserDefaults 存儲自定義對象
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品色悠悠| 久久五月情影视| 91在线视频导航| 久久久久亚洲精品成人网小说| 久久国产精品久久久| 欧美一级黑人aaaaaaa做受| 日本精品久久中文字幕佐佐木| 欧美野外猛男的大粗鳮| 亚洲国产精品成人一区二区| 91国产一区在线| 欧美二区在线播放| 日韩成人高清在线| 久久久欧美一区二区| 成人网欧美在线视频| 国产丝袜一区二区三区| 久久久www成人免费精品| 欧美黑人视频一区| 欧美在线视频导航| 成人国产精品一区二区| 国产成人一区二| 人体精品一二三区| 91成人在线播放| 亚洲视频第一页| 国产成人精品网站| 欧美性猛交xxx| 国产精品爽爽ⅴa在线观看| 激情懂色av一区av二区av| 俺去了亚洲欧美日韩| 日韩天堂在线视频| 国产欧美一区二区三区视频| 91亚洲午夜在线| 26uuu日韩精品一区二区| 国产精品视频大全| 中文字幕欧美精品在线| 国产精品com| 亚洲男人的天堂在线播放| 欧美电影《睫毛膏》| 91亚洲国产成人精品性色| 欧美伦理91i| 成人av.网址在线网站| 国产欧美一区二区三区四区| 亚洲欧美三级伦理| 精品久久久999| 欧美高清不卡在线| 91在线国产电影| 久久久亚洲精品视频| 91免费精品视频| 亚洲黄色在线看| 中文字幕亚洲国产| 亚洲免费高清视频| 中文字幕日韩精品在线观看| 久久av在线播放| 亚洲性夜色噜噜噜7777| 欧美成人激情视频免费观看| 久久久午夜视频| 国产欧美一区二区三区视频| 久久免费精品视频| 亚洲成av人影院在线观看| 亚洲91av视频| 伊人久久久久久久久久久久久| 国产欧美va欧美va香蕉在线| 日韩国产精品亚洲а∨天堂免| 日韩av在线一区二区| 91av在线网站| 欧美小视频在线| 欧美精品制服第一页| 26uuu亚洲国产精品| 亚洲精品动漫久久久久| 九九热视频这里只有精品| 国产精品十八以下禁看| 欧美在线一级va免费观看| 日韩av不卡电影| 91精品久久久久久久久| 欧美电影免费在线观看| 亚洲人午夜色婷婷| 亚洲国产婷婷香蕉久久久久久| 国产丝袜一区二区三区免费视频| 久久99久久99精品中文字幕| 国产精品视频资源| 国产成人精品久久| 国产精品盗摄久久久| 欧美激情欧美狂野欧美精品| 人人澡人人澡人人看欧美| 91国偷自产一区二区三区的观看方式| 欧美一级淫片aaaaaaa视频| 亚洲精品国产精品国自产在线| 欧美精品videosex牲欧美| 一个人看的www欧美| 综合国产在线观看| 日韩美女激情视频| 这里只有精品在线观看| 亚洲天堂成人在线视频| 久久影院模特热| 久久久999国产精品| 久热国产精品视频| 91免费视频国产| 国产精品第七影院| 中文字幕亚洲一区在线观看| 亚洲国产精品专区久久| 综合国产在线观看| 91久久久在线| 欧美日韩在线免费| 91a在线视频| 欧美日韩综合视频网址| 深夜福利国产精品| 日韩美女在线看| 日韩欧美精品免费在线| 久久成人一区二区| 色噜噜亚洲精品中文字幕| 亚洲第一视频网站| 欧美日韩亚洲激情| 亚洲精品永久免费| 91在线视频一区| 久久久久久12| 亚洲精品免费av| 国产精品入口日韩视频大尺度| 久久精品亚洲一区| 欧美最猛性xxxxx免费| 亚洲男人天堂2024| 日本中文字幕不卡免费| 国产精品久久久久久久电影| 精品国产一区二区三区久久狼5月| 91av在线免费观看视频| 国产精品免费视频xxxx| 亚洲影院高清在线| 欧美放荡办公室videos4k| 在线成人免费网站| 精品久久香蕉国产线看观看亚洲| 91亚洲精品在线观看| 日韩精品在线视频美女| 夜夜嗨av一区二区三区四区| 亚洲福利影片在线| 国产精品福利观看| 国产精品91在线观看| 91亚洲国产成人久久精品网站| 国产日韩欧美夫妻视频在线观看| 96精品久久久久中文字幕| 亚洲综合自拍一区| 日韩成人在线网站| 日韩欧美在线视频观看| 97在线免费观看| 亚洲在线免费看| 欧美激情中文字幕乱码免费| 91中文字幕一区| 在线精品国产成人综合| 久久影视电视剧免费网站| 欧美日产国产成人免费图片| 欧美色xxxx| 欧美成人小视频| 亚洲天堂成人在线| 欧美精品激情在线| 国产999精品视频| 国产在线高清精品| 91精品国产综合久久香蕉最新版| 成人久久精品视频| 国内精品久久久久久| 色综合天天狠天天透天天伊人| 亚洲一区二区三区在线免费观看| 欧美日韩一区二区免费在线观看| 亚洲福利在线看| 激情亚洲一区二区三区四区| 45www国产精品网站| 欧美诱惑福利视频| 亚洲国产日韩欧美综合久久|