NSUserDefaults的用法

NSUserDefaults適合存儲輕量級的本地數據,比如要保存一個登陸界面的數據,用戶名、密碼之類的,個人覺得使用NSUserDefaults是首選。下次再登陸的時候就可以直接從NSUserDefaults里面讀取上次登陸的信息咯。

因為如果使用自己建立的plist文件什么的,還得自己顯示創建文件,讀取文件,很麻煩,而是用NSUserDefaults則不用管這些東西,就像讀字符串一樣,直接讀取就可以了。

NSUserDefaults支持的數據格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL類型。如果要存儲自定義的數據類型,需要將對象歸檔成NSData類型

NSUserDefaults很方便,讀取也很容易。下面給出一個示例看看如何使用:(PS:更詳細的也可以參考官方文檔哈)

ViewController.h文件中主要是放幾個控件,用于顯示存儲的數據:

?

[cpp]?view plain?copy
  1. #import?<UIKit/UIKit.h>??
  2. ??
  3. @interface?ViewController?:?UIViewController??
  4. {??
  5. ??????
  6. ????IBOutlet?UILabel?*txtInteger;??
  7. ????IBOutlet?UILabel?*txtFloat;??
  8. ????IBOutlet?UILabel?*txtDouble;??
  9. ????IBOutlet?UILabel?*txtNSString;??
  10. ????IBOutlet?UILabel?*txtNSDate;??
  11. ????IBOutlet?UILabel?*txtNSArray;??
  12. ????IBOutlet?UILabel?*txtNSDictionary;??
  13. }??
  14. ??
  15. @end??

ViewController.m文件中最重要的是兩個方法:

?

saveNSUserDefaults:用于將各種類型數據保存到NSUserDefaults中

readNSUserDefautls:用于從NSUserDefaults中讀取各種類型的數據。在viewDidLoad中調用這兩個方法就可以看出結果咯

?

[cpp]?view plain?copy
  1. #import?"ViewController.h"??
  2. ??
  3. @interface?ViewController?()??
  4. ??
  5. @end??
  6. ??
  7. @implementation?ViewController??
  8. ??
  9. -?(void)viewDidLoad??
  10. {??
  11. ????[super?viewDidLoad];??
  12. ??
  13. ????[self?saveNSUserDefaults];??//調用此方法將各種數據存儲到NSUserDefautls中,在下面定義??
  14. ????[self?readNSUserDefaults];??//調用此方法從NSUserDefautls中讀取各種數據,在下面定義??
  15. }??
  16. ??
  17. -?(void)viewDidUnload??
  18. {??
  19. ????[txtNSString?release];??
  20. ????txtNSString?=?nil;??
  21. ????[txtNSDate?release];??
  22. ????txtNSDate?=?nil;??
  23. ????[txtNSArray?release];??
  24. ????txtNSArray?=?nil;??
  25. ????[txtNSDictionary?release];??
  26. ????txtNSDictionary?=?nil;??
  27. ????[txtInteger?release];??
  28. ????txtInteger?=?nil;??
  29. ????[txtFloat?release];??
  30. ????txtFloat?=?nil;??
  31. ????[txtDouble?release];??
  32. ????txtDouble?=?nil;??
  33. ????[super?viewDidUnload];??
  34. ????//?Release?any?retained?subviews?of?the?main?view.??
  35. }??
  36. ??
  37. -?(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation??
  38. {??
  39. ????return?(interfaceOrientation?!=?UIInterfaceOrientationPortraitUpsideDown);??
  40. }??
  41. ??
  42. -?(void)dealloc?{??
  43. ????[txtNSString?release];??
  44. ????[txtNSDate?release];??
  45. ????[txtNSArray?release];??
  46. ????[txtNSDictionary?release];??
  47. ????[txtInteger?release];??
  48. ????[txtFloat?release];??
  49. ????[txtDouble?release];??
  50. ????[super?dealloc];??
  51. }??
  52. ??
  53. //保存數據到NSUserDefaults??
  54. -(void)saveNSUserDefaults??
  55. {??
  56. ????NSString?*myString?=?@"enuola";??
  57. ????int?myInteger?=?100;??
  58. ????float?myFloat?=?50.0f;??
  59. ????double?myDouble?=?20.0;??
  60. ????NSDate?*myDate?=?[NSDate?date];??
  61. ????NSArray?*myArray?=?[NSArray?arrayWithObjects:@"hello",?@"world",?nil];??
  62. ????NSDictionary?*myDictionary?=?[NSDictionary?dictionaryWithObjects:[NSArray?arrayWithObjects:@"enuo",?@"20",?nil]?forKeys:[NSArray?arrayWithObjects:@"name",?@"age",?nil]];??
  63. ??????
  64. ????//將上述數據全部存儲到NSUserDefaults中??
  65. ????NSUserDefaults?*userDefaults?=?[NSUserDefaults?standardUserDefaults];??
  66. ????//存儲時,除NSNumber類型使用對應的類型意外,其他的都是使用setObject:forKey:??
  67. ????[userDefaults?setInteger:myInteger?forKey:@"myInteger"];??
  68. ????[userDefaults?setFloat:myFloat?forKey:@"myFloat"];??
  69. ????[userDefaults?setDouble:myDouble?forKey:@"myDouble"];??
  70. ??????
  71. ????[userDefaults?setObject:myString?forKey:@"myString"];??
  72. ????[userDefaults?setObject:myDate?forKey:@"myDate"];??
  73. ????[userDefaults?setObject:myArray?forKey:@"myArray"];??
  74. ????[userDefaults?setObject:myDictionary?forKey:@"myDictionary"];??
  75. ??????
  76. ????//這里建議同步存儲到磁盤中,但是不是必須的??
  77. ????[userDefaults?synchronize];??
  78. ??????
  79. }??
  80. ??
  81. //從NSUserDefaults中讀取數據??
  82. -(void)readNSUserDefaults??
  83. {??
  84. ????NSUserDefaults?*userDefaultes?=?[NSUserDefaults?standardUserDefaults];??
  85. ??????
  86. ????//讀取數據到各個label中??
  87. ????//讀取整型int類型的數據??
  88. ????NSInteger?myInteger?=?[userDefaultes?integerForKey:@"myInteger"];??
  89. ????txtInteger.text?=?[NSString?stringWithFormat:@"%d",myInteger];??
  90. ??????
  91. ????//讀取浮點型float類型的數據??
  92. ????float?myFloat?=?[userDefaultes?floatForKey:@"myFloat"];??
  93. ????txtFloat.text?=?[NSString?stringWithFormat:@"%f",myFloat];??
  94. ??????
  95. ????//讀取double類型的數據??
  96. ????double?myDouble?=?[userDefaultes?doubleForKey:@"myDouble"];??
  97. ????txtDouble.text?=?[NSString?stringWithFormat:@"%f",myDouble];??
  98. ??????
  99. ????//讀取NSString類型的數據??
  100. ????NSString?*myString?=?[userDefaultes?stringForKey:@"myString"];??
  101. ????txtNSString.text?=?myString;??
  102. ??????
  103. ????//讀取NSDate日期類型的數據??
  104. ????NSDate?*myDate?=?[userDefaultes?valueForKey:@"myDate"];??
  105. ????NSDateFormatter?*df?=?[[NSDateFormatter?alloc]?init];??
  106. ????[df?setDateFormat:@"yyyy-MM-dd?HH:mm:ss"];??
  107. ????txtNSDate.text?=?[NSString?stringWithFormat:@"%@",[df?stringFromDate:myDate]];??
  108. ??????
  109. ????//讀取數組NSArray類型的數據??
  110. ????NSArray?*myArray?=?[userDefaultes?arrayForKey:@"myArray"];??
  111. ????NSString?*myArrayString?=?[[NSString?alloc]?init];??
  112. ????for(NSString?*str?in?myArray)??
  113. ????{??
  114. ????????NSLog(@"str=?%@",str);??
  115. ????????myArrayString?=?[NSString?stringWithFormat:@"%@??%@",?myArrayString,?str];??
  116. ????????[myArrayString?stringByAppendingString:str];??
  117. //????????[myArrayString?stringByAppendingFormat:@"%@",str];??
  118. ????????NSLog(@"myArrayString=%@",myArrayString);??
  119. ????}??
  120. ????txtNSArray.text?=?myArrayString;??
  121. ??????
  122. ????//讀取字典類型NSDictionary類型的數據??
  123. ????NSDictionary?*myDictionary?=?[userDefaultes?dictionaryForKey:@"myDictionary"];??
  124. ????NSString?*myDicString?=?[NSString?stringWithFormat:@"name:%@,?age:%d",[myDictionary?valueForKey:@"name"],?[[myDictionary?valueForKey:@"age"]?integerValue]];??
  125. ????txtNSDictionary.text?=?myDicString;??
  126. }??
  127. ??
  128. @end??



?

好了,運行一下,可以看到xib文件中的各種數據已經綁定上了吧?

?

再次運行的時候,可以把viewDidLoad中的 ?[self ?saveNSUserDefaults]; ?這一行注釋掉,讓程序直接讀取而不存儲數據,發現以前保存的數據仍然可以讀取到界面上。

嘻嘻,很簡單吧,就這樣就可以是實現數據的存儲了。

下面講一下原理:

你可能會問一個問題:NSUserDefautls將數據存儲在什么地方了???我都沒有顯示的指定路徑???很疑惑吧。。。。

用NSUserDefaults存儲的數據下次程序運行的時候依然存在,它把數據存儲在什么地方了?如何能夠清除?

其實它存儲在應用程序內置的一個plist文件里,這個可以根據路徑看到。
比如說這個是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(這個是應用程序對應在mac上的位置)
這個下面有/Library/Prefereces,里面有個plist文件,存儲的就是你的userDefaults
想要刪掉的話,用removeObjectForKey或者刪掉沙盒,也就是你的應用程序然后重新安裝。

轉載于:https://www.cnblogs.com/W-Kr/p/5327547.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272118.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http、https、密碼學基礎、GET和POST區別

http協議相關&#xff1a; http協議的特性: http協議是建立在TCP/IP協議之上應用層協議&#xff0c;默認端口為80或者8080。http協議的的特點是無狀態&#xff0c;無連接&#xff08;并不是真的沒有連接&#xff0c;而是在請求數據的時候有連接&#xff0c;在數據回來的時候就…

apache 配置文件內使用 8080 端口_【SpringBoot 框架】- SpringBoot 配置文件

一、SpringBoot配置文件類型SpringBoot是基于約定的&#xff0c;所以很多配置都有默認值&#xff0c;但如果想使用自己的配置替換默認配置的話 &#xff0c;就可以自己編寫配置文件進行相應配置&#xff0c;起步依賴spring-boot-starter-parent 中&#xff0c;有配置文件的引入…

Linux中while循環的用法筆記

Shell中可以采用while循環來實現需要進行循環的操作。 語法結構如下&#xff1a; while exp do command done 執行過程&#xff1a;while將測試exp的返回值&#xff0c;如果返回值為true則執行循環體的命令&#xff0c;返回值為false則不執行循環。循環完成后會進入下一次循環之…

IOS9.0 導航欄狀態欄

狀態欄高度20px 豎屏是導航欄高度44px 橫屏時導航欄高度32px 獲取當前屏幕狀態&#xff1a;UIApplication.sharedApplication().statusBarOrientation轉載于:https://www.cnblogs.com/iOSboyYang/p/5328886.html

libcurl庫的安裝和使用

libcurl簡介: libcurl是一個跨平臺的網絡協議庫&#xff0c;支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協議。libcurl同樣支持HTTPS證書授權&#xff0c;HTTP POST, HTTP PUT, FTP 上傳, HTTP基本表單上傳&#xff0c;代理&#xff0c;cookies,和用戶認證。li…

android 微信縮小通話界面_安卓如何做出微信那樣的界面仿微信“我”的界面2/5...

本系列目標通過安卓編程仿寫微信“我”的界面,讓大家也能做出類似微信界面.效果圖如下:本文目標做出支付部分(其他部分在后續文章中逐步分享).效果圖如下:實現方案通過截圖工具或者下載一張微信支付照片,放到工程的src/main/res/drawable目錄下,命名為pay.png;同樣獲取一張向右…

Shell腳本中函數的定義和調用筆記

Shell腳本函數的作用主要是把一些可以通用的功能封裝起來、避免腳本中出現大量重復的腳本代碼&#xff0c;同時可以大大增強腳本的可讀性、和可維護性。Shell函數定義的語法格式&#xff1a;function FUNCTION_NAME(){command1command2command3}也可以省略function 關鍵字FUNCT…

opensll、libcurl庫安裝的使用,樹莓派CSI攝像頭的配置,樹莓派調用智能API平臺實現人臉識別、樹莓派配置中文環境

接著上一節人工智能翔云平臺介紹&#xff1a; 人工智能OCR識別&#xff1a; OCR 是英文Optical Character Recognition的縮寫&#xff0c;意思是光學字符識別&#xff0c;也可簡單地稱為文字識別&#xff0c;是文字自動輸入的一種方法。它通過 掃描 和攝像等光學輸入方式獲取紙…

apache 設置禁止訪問某些文件或目錄

【apache配置禁止訪問】1. 禁止訪問某些文件/目錄增加Files選項來控制&#xff0c;比如要不允許訪問 .inc 擴展名的文件&#xff0c;保護php類庫&#xff1a;<Files ~ "\.inc$">Order allow,denyDeny from all</Files>禁止訪問某些指定的目錄&#xff1a…

Shell腳本中函數返回值的用法筆記

函數的返回值又可以稱為函數的退出狀態&#xff0c;實際上可以理解為一種通信方式。Shell腳本中函數可以使用返回值的方式把調用的結果信息反饋給調用者。便于調用者可以根據反饋的結果做相應處理。說明&#xff1a;函數的返回值主要使用 return 關鍵字來處理。這和很多編程語言…

python 怎么取對數_概率矩陣分解(PMF)及MovieLens上的Python代碼

首先對Probabilistic Matrix Factorization這篇論文的核心公式進行講解和推導&#xff1b;然后用Python代碼在Movielens數據集上進行測試實驗。一、 背景知識文中作者提到&#xff0c;傳統的協同過濾算法有兩個不足&#xff1a;1).不能很好地處理規模非常大的數據&#xff1b;2…

JAVA SE、EE、ME,JRE、JDK,基本數據類型,訪問修飾符、函數、封裝的概念、UML類圖、構造方法、this關鍵字、static關鍵字、方法重載、方法重寫、包(packahe)

運行第一個JAVA程序&#xff1a; 這里使用的開發環境是eclipse&#xff0c;新建一個java工程&#xff0c;然后可以看到src這個是存放java代碼的地方&#xff0c;然后在src文件右擊新建一個class&#xff08;類&#xff09;&#xff0c;然后可以看到下圖&#xff0c;同樣和C語言…

unity中如何解決鏡頭穿透模型?

設置相機的Near clip plane,調小一點,但是不要給負數就行。 轉載于:https://www.cnblogs.com/ZeroMurder/p/5331174.html

Shell腳本中函數位置參數的用法筆記

位置參數主要是用于調用函數的時候有時候需要傳遞參數&#xff0c;有很大的比例都是需要調用函數的時候動態傳遞參數&#xff0c;從而實現相應的功能。比如我想要計算兩個數的和&#xff0c;可以通過函數是實現&#xff0c;需要定義兩個參數作為計算的值。這樣的計算兩個數的函…

生鮮配送小程序源碼_生鮮社區團購配送系統小程序源碼搭建平臺模式

生鮮配送系統開發&#xff0c;找【金生157威6875店2419同號】生鮮配送模式開發&#xff0c;生鮮配送軟件開發&#xff0c;生鮮配送APP開發&#xff0c;生鮮配送平臺開發平臺&#xff0c;生鮮配送系統源碼開發平臺&#xff0c;生鮮配送系統平臺&#xff0c;生鮮配送系統定制開發…

軟件開發的早期為何要進行可行性研究?該從哪幾個方面研究目標系統的可行性?...

因為并非任何問題都有簡單明顯的解決辦法&#xff0c;很多問題不可能在預定的系統規模或者時間期限內解決。如果問題沒有可行的解決方案&#xff0c;那么花費在這工程上的任何時間人力經費等資源都是浪費。。 一般來說&#xff0c;至少應該從如下3個方面研究其可行性&#xff1…