设为首页 收藏本站
查看: 1835|回复: 0

[Cloudstack] IOS中NSUserDefaults的用法(轻量级本地数据存储)

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2015-10-14 08:56:49 | 显示全部楼层 |阅读模式





  • DSC0000.jpg

集结号
这一秒不放弃,下一秒就会有希望

  • DSC0001.gif 目录视图
  • DSC0002.gif 摘要视图
  • DSC0003.gif 订阅
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文件中主要是放几个控件,用于显示存储的数据:
  
[cpp] 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中调用这两个方法就可以看出结果咯
  
[cpp] viewplaincopy

  • #import &quot;ViewController.h&quot;  
  •   
  • @interface ViewController ()  
  •   
  • @end  
  •   
  • @implementation ViewController  
  •   
  • - (void)viewDidLoad  
  • {  
  •     [super viewDidLoad];  
  •   
  •     [self saveNSUserDefaults];  //调用此方法将各种数据存储到NSUserDefautls中,在下面定义  
  •     [self readNSUserDefaults];  //调用此方法从NSUserDefautls中读取各种数据,在下面定义  
  • }  
  •   
  • - (void)viewDidUnload  
  • {  
  •     [txtNSString release];  
  •     txtNSString = nil;  
  •     [txtNSDate release];  
  •     txtNSDate = nil;  
  •     [txtNSArray release];  
  •     txtNSArray = nil;  
  •     [txtNSDictionary release];  
  •     txtNSDictionary = nil;  
  •     [txtInteger release];  
  •     txtInteger = nil;  
  •     [txtFloat release];  
  •     txtFloat = nil;  
  •     [txtDouble release];  
  •     txtDouble = nil;  
  •     [super viewDidUnload];  
  •     // Release any retained subviews of the main view.  
  • }  
  •   
  • - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  • {  
  •     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  • }  
  •   
  • - (void)dealloc {  
  •     [txtNSString release];  
  •     [txtNSDate release];  
  •     [txtNSArray release];  
  •     [txtNSDictionary release];  
  •     [txtInteger release];  
  •     [txtFloat release];  
  •     [txtDouble release];  
  •     [super dealloc];  
  • }  
  •   
  • //保存数据到NSUserDefaults  
  • -(void)saveNSUserDefaults  
  • {  
  •     NSString *myString = @&quot;enuola&quot;;  
  •     int myInteger = 100;  
  •     float myFloat = 50.0f;  
  •     double myDouble = 20.0;  
  •     NSDate *myDate = [NSDate date];  
  •     NSArray *myArray = [NSArray arrayWithObjects:@&quot;hello&quot;, @&quot;world&quot;, nil];  
  •     NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@&quot;enuo&quot;, @&quot;20&quot;, nil] forKeys:[NSArray arrayWithObjects:@&quot;name&quot;, @&quot;age&quot;, nil]];  
  •       
  •     //将上述数据全部存储到NSUserDefaults中  
  •     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];  
  •     //存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey:  
  •     [userDefaults setInteger:myInteger forKey:@&quot;myInteger&quot;];  
  •     [userDefaults setFloat:myFloat forKey:@&quot;myFloat&quot;];  
  •     [userDefaults setDouble:myDouble forKey:@&quot;myDouble&quot;];  
  •       
  •     [userDefaults setObject:myString forKey:@&quot;myString&quot;];  
  •     [userDefaults setObject:myDate forKey:@&quot;myDate&quot;];  
  •     [userDefaults setObject:myArray forKey:@&quot;myArray&quot;];  
  •     [userDefaults setObject:myDictionary forKey:@&quot;myDictionary&quot;];  
  •       
  •     //这里建议同步存储到磁盘中,但是不是必须的  
  •     [userDefaults synchronize];  
  •       
  • }  
  •   
  • //从NSUserDefaults中读取数据  
  • -(void)readNSUserDefaults  
  • {  
  •     NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];  
  •       
  •     //读取数据到各个label中  
  •     //读取整型int类型的数据  
  •     NSInteger myInteger = [userDefaultes integerForKey:@&quot;myInteger&quot;];  
  •     txtInteger.text = [NSString stringWithFormat:@&quot;%d&quot;,myInteger];  
  •       
  •     //读取浮点型float类型的数据  
  •     float myFloat = [userDefaultes floatForKey:@&quot;myFloat&quot;];  
  •     txtFloat.text = [NSString stringWithFormat:@&quot;%f&quot;,myFloat];  
  •       
  •     //读取double类型的数据  
  •     double myDouble = [userDefaultes doubleForKey:@&quot;myDouble&quot;];  
  •     txtDouble.text = [NSString stringWithFormat:@&quot;%f&quot;,myDouble];  
  •       
  •     //读取NSString类型的数据  
  •     NSString *myString = [userDefaultes stringForKey:@&quot;myString&quot;];  
  •     txtNSString.text = myString;  
  •       
  •     //读取NSDate日期类型的数据  
  •     NSDate *myDate = [userDefaultes valueForKey:@&quot;myDate&quot;];  
  •     NSDateFormatter *df = [[NSDateFormatter alloc] init];  
  •     [df setDateFormat:@&quot;yyyy-MM-dd HH:mm:ss&quot;];  
  •     txtNSDate.text = [NSString stringWithFormat:@&quot;%@&quot;,[df stringFromDate:myDate]];  
  •       
  •     //读取数组NSArray类型的数据  
  •     NSArray *myArray = [userDefaultes arrayForKey:@&quot;myArray&quot;];  
  •     NSString *myArrayString = [[NSString alloc] init];  
  •     for(NSString *str in myArray)  
  •     {  
  •         NSLog(@&quot;str= %@&quot;,str);  
  •         myArrayString = [NSString stringWithFormat:@&quot;%@  %@&quot;, myArrayString, str];  
  •         [myArrayString stringByAppendingString:str];  
  • //        [myArrayString stringByAppendingFormat:@&quot;%@&quot;,str];  
  •         NSLog(@&quot;myArrayString=%@&quot;,myArrayString);  
  •     }  
  •     txtNSArray.text = myArrayString;  
  •       
  •     //读取字典类型NSDictionary类型的数据  
  •     NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@&quot;myDictionary&quot;];  
  •     NSString *myDicString = [NSString stringWithFormat:@&quot;name:%@, age:%d&quot;,[myDictionary valueForKey:@&quot;name&quot;], [[myDictionary valueForKey:@&quot;age&quot;] integerValue]];  
  •     txtNSDictionary.text = myDicString;  
  • }  
  •   
  • @end  


  
好了,运行一下,可以看到xib文件中的各种数据已经绑定上了吧?  
DSC0004.png

  再次运行的时候,可以把viewDidLoad中的  [self  saveNSUserDefaults];  这一行注释掉,让程序直接读取而不存储数据,发现以前保存的数据仍然可以读取到界面上
  嘻嘻,很简单吧,就这样就可以是实现数据的存储了。
  下面讲一下原理:
  你可能会问一个问题: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发表 [回复] DSC0005.jpg 好文章,转了收藏了哦,多谢多谢。2楼 buyicn 2014-02-21 21:00发表 [回复] DSC0006.jpg [objc] viewplaincopy

  • NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];  
  • [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];  

使用上面的方法,可以清除NSUserDefaults数据。参考下面的帖子:
http://stackoverflow.com/questions/545091/clearing-nsuserdefaults1楼 刘柯辰888 2014-02-11 23:55发表 [回复] DSC0007.jpg 取了学了学 多谢了..发表评论

  • 用 户 名:
  • u011140147


  • 评论内容:
  • DSC0008.gif

      
* 以上用户言论只代表其个人观点,不代表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
    个人资料

    DSC0009.jpg
    enuola DSC00010.gif

    • 访问:221683次
    • 积分:2236分
    • 排名:第4717名


    • 原创:54篇
    • 转载:23篇
    • 译文:0篇
    • 评论:121条


    文章搜索



    文章分类


  • IOS开发(69)
  • Object-C编程语言(41)
  • Web开发技巧(1)
  • 开发资源(5)
  • 数据库(1)
  • ASIHTTPRequest(1)
  • C/C&#43;&#43;(1)
  • HTML&#43;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 DSC00011.gif           版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126469-1-1.html 上篇帖子: kettle 4.1 源码分析 下篇帖子: 3.4. Extracting source
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表