iOS 数据持久化之NSUserDefaults-保存Settings
来源:互联网 发布:淘宝高仿nike鞋店推荐 编辑:程序博客网 时间:2024/04/30 15:25
原创Blog,转载请注明
blog.csdn.net/hello_hwc
前言:iOS的数据持久化存储分为很多种
- 普通文件,plist
- NSUserDefaults
- CoreData
- KeyChain
本文讲解NSUserDefaults的使用
什么样的数据存储在NSUserDefaults里?
用户的偏好信息,设置信息等。换句话说,app的Setting里的信息,都可以存储在这里。
不能用来存储大量数据。
保存的文件存储在哪里?
文件存储在
$HOME/Library/Preferences/
这个目录下会保存一个.plist来存储数据。
这里的数据是未没有加密的,不要用它保存用户名密码
StandardUserDefaults
大部分的时候使用StandardUserDefaults来保存settings数据,这是一个共享的UserDefaults,意味着在程序的任意一个地方访问到的都是同一个UserDefaults
为一个App添加Settings信息包括四个步骤
- 创建一个plist来保存默认设置
- 在AppDelegate 的方法中注册默认的设置
- 适当的时候,读出设置信息
- 用户保存了设置信息,写入到NSUserDefaults中
创建Plist
注册默认的设置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSUserDefaults * standard = [NSUserDefaults standardUserDefaults]; NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"DefaultSettings" withExtension:@"plist"]; NSDictionary * defaultSettings = [NSDictionary dictionaryWithContentsOfURL:fileURL]; [standard registerDefaults:defaultSettings]; return YES;}
注意,创建的设置信息是在Registration Domain中。这个域是一个临时域,在初始化NSUserDefautls的时候,会先搜索Application Domain(正常读取的数据),再搜索Registration Domain。使用这个域是为了在Application Domain中没有存储数据的时候(例如第一次)也能够正常读取数据。
读出设置信息
NSUserDefaults * settings = [NSUserDefaults standardUserDefaults]; NSInteger savedbool = [settings boolForKey:@"KEYBOOL"]; NSString * savedStr = [settings stringForKey:@"KSTRING"];
保存设置信息
NSUserDefaults * settings = [NSUserDefaults standardUserDefaults]; [settings setBool:false forKey:@"KEYBOOL"]; [settings setObject:@"String" forKey:@"KSTRING"];
注意,上面的代码写入的数据,并不会立刻同步到文件里,而是保存在cache中,这样做提升速率(文件IO的效率很低)。IOS系统每隔一段时间会同步一次。如果要立刻同步
[settings synchronize];
如果不是非常有必要同步到数据库里,建议不要每次写入都调用同步方法,因为相对来说,它实在是很慢。
为app group服务的UserDefaults
这样的UserDefaults是共享的,在以下两种情况下使用
- app suite,也就是说两个app之间需要共享数据
- app extension,在extension和他的contain app之间共享数据。典型的是输入法程序,在contain app里设置以后,键盘的样式就会改变。
如何使用-以extension为例
在contain app写入数据
OC代码
NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.yourcompanyname.yourappname"]; [shared setObject:your dic forKey:@"KDICFORWIDGET"]; [shared setObject:@"1234" forKey:@"KSTRINGFORWIDGET"]; [shared synchronize];
在extension读数据
NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.yourcompanyname.yourappname"];NSMutableDictionary *dic = [shared objectForKey:@"KDICFORWIDGET"];NSString *str = [shared objectForKey:@"KSTRINGFORWIDGET"]
BTY,我想知道,点踩点那位同学,你是觉得我写的哪里不对吗?我感觉我写的比国内95%关于NSUserDefaults的博客都要详细吧?
- iOS 数据持久化之NSUserDefaults-保存Settings
- iOS 数据持久化之-NSUserDefaults
- ios数据本地持久化 之 NSUserDefaults,切入后台时保存
- iOS 数据持久化三-NSUserDefaults
- iOS 数据持久化三-NSUserDefaults
- IOS持久化之NSUserDefaults
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- 数据持久化之NSUserDefaults
- 数据持久化之NSUserDefaults
- iOS开发之数据持久—NSUserDefaults
- iOS数据持久化 NSUserDefaults的使用
- iOS 数据持久化(三)NSUserDefaults
- iOS - 数据持久化---- NSUserDefaults & NSKeyedArchiver
- iOS NSUserDefaults数据持久化存储
- 数据持久化(四)之NSUserDefaults
- 联想G480—win8.1安装Centos7双系统
- hdu 2852 KiKi's K-Number
- HDU ACM 1041Computer Transformation(大数模拟+找规律)
- 2015编程之美挑战赛:扑克牌 全排列
- c++模拟操作系统进程调度算法(优先数,时间片轮转)
- iOS 数据持久化之NSUserDefaults-保存Settings
- 分析、化验、检验、检测、测量、测试、计量、实验、试验的区别
- 几个FireFox的插件
- 心态篇一
- ATM自动取款机系统的功能需求分析
- 陈华:我是如何走上互联网这条路的
- 安装第三方库rsa遇到的问题
- 陈华:新手程序员快速成长之道
- 陈华:淘宝同学左侧导航栏div鼠标上浮边框变色无遮挡处理方法