IOS中NSUserDefaults的用法(轻量级本地数据存储)
[*]
[*]
[*]
[*]
[*]
[*]
集结号
这一秒不放弃,下一秒就会有希望
[*]目录视图
[*]摘要视图
[*]订阅
2014开源技术大会(读书汇) OpenStack企业应用之路浅析 专访多信创始人胡泊:将二维码包装成产品让物体开口说话 IOS中NSUserDefaults的用法(轻量级本地数据存储)
分类: IOS开发 Object-C编程语言2012-09-0910:58 12533人阅读 评论(3) 收藏 举报存储iosfloatinterfaceintegerdate NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯。
因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。很实用吧
NSUserDefaults很方便,读取也很容易。下面给出一个示例看看如何使用:(PS:更详细的也可以参考官方文档哈)
ViewController.h文件中主要是放几个控件,用于显示存储的数据:
viewplaincopy
[*]#import <UIKit/UIKit.h>
[*]
[*]@interface ViewController : UIViewController
[*]{
[*]
[*] IBOutlet UILabel *txtInteger;
[*] IBOutlet UILabel *txtFloat;
[*] IBOutlet UILabel *txtDouble;
[*] IBOutlet UILabel *txtNSString;
[*] IBOutlet UILabel *txtNSDate;
[*] IBOutlet UILabel *txtNSArray;
[*] IBOutlet UILabel *txtNSDictionary;
[*]}
[*]
[*]@end
ViewController.m文件中最重要的是两个方法:
saveNSUserDefaults:用于将各种类型数据保存到NSUserDefaults中
readNSUserDefautls:用于从NSUserDefaults中读取各种类型的数据。在viewDidLoad中调用这两个方法就可以看出结果咯
viewplaincopy
[*]#import "ViewController.h"
[*]
[*]@interface ViewController ()
[*]
[*]@end
[*]
[*]@implementation ViewController
[*]
[*]- (void)viewDidLoad
[*]{
[*] ;
[*]
[*] ;//调用此方法将各种数据存储到NSUserDefautls中,在下面定义
[*] ;//调用此方法从NSUserDefautls中读取各种数据,在下面定义
[*]}
[*]
[*]- (void)viewDidUnload
[*]{
[*] ;
[*] txtNSString = nil;
[*] ;
[*] txtNSDate = nil;
[*] ;
[*] txtNSArray = nil;
[*] ;
[*] txtNSDictionary = nil;
[*] ;
[*] txtInteger = nil;
[*] ;
[*] txtFloat = nil;
[*] ;
[*] txtDouble = nil;
[*] ;
[*] // Release any retained subviews of the main view.
[*]}
[*]
[*]- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
[*]{
[*] return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
[*]}
[*]
[*]- (void)dealloc {
[*] ;
[*] ;
[*] ;
[*] ;
[*] ;
[*] ;
[*] ;
[*] ;
[*]}
[*]
[*]//保存数据到NSUserDefaults
[*]-(void)saveNSUserDefaults
[*]{
[*] NSString *myString = @"enuola";
[*] int myInteger = 100;
[*] float myFloat = 50.0f;
[*] double myDouble = 20.0;
[*] NSDate *myDate = ;
[*] NSArray *myArray = "hello", @"world", nil];
[*] NSDictionary *myDictionary = "enuo", @"20", nil] forKeys:"name", @"age", nil]];
[*]
[*] //将上述数据全部存储到NSUserDefaults中
[*] NSUserDefaults *userDefaults = ;
[*] //存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey:
[*] "myInteger"];
[*] "myFloat"];
[*] "myDouble"];
[*]
[*] "myString"];
[*] "myDate"];
[*] "myArray"];
[*] "myDictionary"];
[*]
[*] //这里建议同步存储到磁盘中,但是不是必须的
[*] ;
[*]
[*]}
[*]
[*]//从NSUserDefaults中读取数据
[*]-(void)readNSUserDefaults
[*]{
[*] NSUserDefaults *userDefaultes = ;
[*]
[*] //读取数据到各个label中
[*] //读取整型int类型的数据
[*] NSInteger myInteger = "myInteger"];
[*] txtInteger.text = "%d",myInteger];
[*]
[*] //读取浮点型float类型的数据
[*] float myFloat = "myFloat"];
[*] txtFloat.text = "%f",myFloat];
[*]
[*] //读取double类型的数据
[*] double myDouble = "myDouble"];
[*] txtDouble.text = "%f",myDouble];
[*]
[*] //读取NSString类型的数据
[*] NSString *myString = "myString"];
[*] txtNSString.text = myString;
[*]
[*] //读取NSDate日期类型的数据
[*] NSDate *myDate = "myDate"];
[*] NSDateFormatter *df = [ init];
[*] "yyyy-MM-dd HH:mm:ss"];
[*] txtNSDate.text = "%@",];
[*]
[*] //读取数组NSArray类型的数据
[*] NSArray *myArray = "myArray"];
[*] NSString *myArrayString = [ init];
[*] for(NSString *str in myArray)
[*] {
[*] NSLog(@"str= %@",str);
[*] myArrayString = "%@%@", myArrayString, str];
[*] ;
[*]// ;
[*] NSLog(@"myArrayString=%@",myArrayString);
[*] }
[*] txtNSArray.text = myArrayString;
[*]
[*] //读取字典类型NSDictionary类型的数据
[*] NSDictionary *myDictionary = "myDictionary"];
[*] NSString *myDicString = "name:%@, age:%d","name"], ["age"] integerValue]];
[*] txtNSDictionary.text = myDicString;
[*]}
[*]
[*]@end
好了,运行一下,可以看到xib文件中的各种数据已经绑定上了吧?
再次运行的时候,可以把viewDidLoad中的];这一行注释掉,让程序直接读取而不存储数据,发现以前保存的数据仍然可以读取到界面上。
嘻嘻,很简单吧,就这样就可以是实现数据的存储了。
下面讲一下原理:
你可能会问一个问题:NSUserDefautls将数据存储在什么地方了???我都没有显示的指定路径???很疑惑吧。。。。
用NSUserDefaults存储的数据下次程序运行的时候依然存在,它把数据存储在什么地方了?如何能够清除?
其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。比如说这个是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。
更多4上一篇:在IPhone桌面的应用程序图标右上角显示数字下一篇:IOS中获取各种文件的目录路径的方法相关主题推荐数据存储 ios uiviewcontroller 应用程序 interface相关博文推荐IOS中pagecontrol颜色设置黑马程序员——IOS基础——OC内存管理...IOS 自定义标题文字storyboard如何去掉tablev...android application ...关于设置shadowPath开源中国iOS客户端学习——(十一)AE...不错的资源查看评论3楼 缄默_ios 2014-03-05 21:57发表 [回复]好文章,转了收藏了哦,多谢多谢。2楼 buyicn 2014-02-21 21:00发表 [回复] viewplaincopy
[*]NSString *appDomain = [ mainBundle] bundleIdentifier];
[*][ standardUserDefaults] removePersistentDomainForName:appDomain];
使用上面的方法,可以清除NSUserDefaults数据。参考下面的帖子:
http://stackoverflow.com/questions/545091/clearing-nsuserdefaults1楼 刘柯辰888 2014-02-11 23:55发表 [回复]取了学了学 多谢了..发表评论
[*]用 户 名:
[*]u011140147
[*]评论内容:
[*]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场核心技术类目
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFCWAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IISFedora XML LBS Unity Splashtop UML components WindowsMobile Rails QEMUKDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 RackspaceWebApp SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby HibernateThinkPHP Spark HBase Pure Solr Angular CloudFoundry Redis Scala DjangoBootstrap
个人资料
enuola
[*]访问:221683次
[*]积分:2236分
[*]排名:第4717名
[*]原创:54篇
[*]转载:23篇
[*]译文:0篇
[*]评论:121条
文章搜索
文章分类
[*]IOS开发(69)
[*]Object-C编程语言(41)
[*]Web开发技巧(1)
[*]开发资源(5)
[*]数据库(1)
[*]ASIHTTPRequest(1)
[*]C/C++(1)
[*]HTML+CSS3(1)
文章存档
[*]2014年01月(1)
[*]2013年10月(2)
[*]2013年08月(4)
[*]2013年07月(2)
[*]2013年06月(4)展开
阅读排行
[*]IOS中Json解析的四种方法(49433)
[*]开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)(23266)
[*]IOS中定时器NSTimer的开启与关闭(13396)
[*]IOS中NSUserDefaults的用法(轻量级本地数据存储)(12530)
[*]IOS中UITableView异步加载图片的实现(5799)
[*]IOS中输入框被软键盘遮挡的解决办法(5671)
[*]UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法(5584)
[*]根据字体多少使UILabel自动调节尺寸(4911)
[*]IOS后台运行机制详解(一)(4528)
[*]IOS导航栏的使用方法(4352)
评论排行
[*]IOS中Json解析的四种方法(27)
[*]IOS中输入框被软键盘遮挡的解决办法(25)
[*]IOS中定时器NSTimer的开启与关闭(18)
[*]UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法(11)
[*]IOS中UITableView异步加载图片的实现(6)
[*]IOS推送通知的实现步骤(6)
[*]Object-C使用XML属性列表进行归档(3)
[*]IOS导航栏的使用方法(3)
[*]IOS中NSUserDefaults的用法(轻量级本地数据存储)(3)
[*]自动检测iOS网络并可跳转至设置界面设置网络(3)
推荐文章
最新评论
[*]IOS中输入框被软键盘遮挡的解决办法u010552641:受教了 谢谢……
[*]IOS推送通知的实现步骤u010766022:为什么我第一次出现了推送通知,第二次却没有出现,我卸载后在运行,还是没有
[*]IOS中Json解析的四种方法sunchao0427:很好,要是讲讲基础就会更加清楚!
[*]IOS中NSUserDefaults的用法(轻量级本地数据存储)缄默_ios:好文章,转了收藏了哦,多谢多谢。
[*]开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)wangjing0613:感谢分享!太好啦!!
[*]IOS中Json解析的四种方法fengling132:谢谢,讲的很清楚。
[*]IOS中NSUserDefaults的用法(轻量级本地数据存储)buyicn:NSString *appDomain = [;[;使用上面的方法,可以清除NSUserDefaul...
[*]IOS中NSUserDefaults的用法(轻量级本地数据存储)刘柯辰888:取了学了学 多谢了..
[*]IOS中Json解析的四种方法谁抢名字啊:多谢楼主免积分下载很好的东西。
[*]IOS中UITableView异步加载图片的实现Hollydragon:不错的实现,不过demo有个bug。当网络状况不好的时候,初次下载网络图片,这时不停地上下划动tab...
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈网站客服 杂志客服 微博客服 webmaster@iyunv.com 400-600-2320京 ICP 证 070598 号北京创新乐知信息技术有限公司 版权所有江苏乐知网络技术有限公司 提供商务支持Copyright © 1999-2014, CSDN.NET, All Rights Reserved 版权声明:本文为博主原创文章,未经博主允许不得转载。
页:
[1]