第12课: Application Settings and User Defaults

ios中,在应用程序之外,提供集中的地方,来修改用户的偏好设置,并且序列化到文件。

创建项目

1.utility application模板

一个storyboard

一个主视图mainviewcontroller

一个辅助设置flipviewcontroller

使用设置捆绑包

当setting应用程序启动时,它会检查每个应用程序的设置捆绑包,并为包含设置捆绑包的每个应用程序添加设置组。

在项目中添加设置捆绑包

1. 新建文件 -> resource -> setting bundles

2. 展开settings.bundles,设置属性列表文件Root.plist

要点:

1) 在NSDictionary中,可以使用大多数对象作为键,

但是在属性列表Dictionary节点中,键必须为字符串类型,但是值可以为任何其他属性列表类型。

属性列表类型有: NSDictionary, NSArray, NSData, NSDate, NSBoolen, NSString, NSNumber

(control+右键,选择 show row keys/values选项,可切换到显示 真实的键值名称)

2)键为@"PreferenceSpecifiers",值为Array

Array中,又存储着一系列Dictionary,  每个都对应设置的一个条目

类型可为:Group(分组),Multi Value(多值选择),Slider(滑动块),Text Field(文本输入),Title, Toggle Switch(开关)

3)从一个分组开始,到另外一个分组之间的所有条目,都在此分组中。

4)如果要在应用程序捆绑包中使用图标,则需要把png给拷贝进捆绑包中。

因为设置捆绑包属于settings应用程序的一部分,settings应用程序不能访问本app的沙盒。

5)属性列表编辑器的使用注意:

如果选中某行,return

1.如果展开了,则将会在第一的位置插入子节点

2.如果没展开,则会在后面创建同级节点

3.支持复制粘贴

6)添加应用程序图标

AppSetting Target -》Summary -》找到应用程序图标的配置部分,拖入png文件即可。

7)添加子视图

类型:PSChildPaneSpecfier

链接到另外一个plist文件

创建More.plist的方法,复制Root.plist,重命名,修改

不能再xcode中,为应用程序捆绑包添加新文件,而且属性文件编辑器的save也不支持新文件保存到设置捆绑包中

所以,唯一的方法,是新建文件,另存到某个地方,然后通过finder拖入设置捆绑包中。

通过按一定格式编辑好Root.plist文件,可以在settings应用程序中,实现既定的编辑界面。

读取应用程序中的设置

在应用程序中修改默认设置

NSUserDefaults类提供了非常方便的方法来获取常用的类型,例如floats,doubles,intergers,Booleans,URLs。

所以一个NSUserDefaults的对象必须是属性表,这也就是说我们可以存储NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary这些实例。

如果你想存储其他类型的对象,你要将其归档并创建一个NSData来实现存储。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

//存储时,除NSNumber类型使用对应的类型以外,其他的都是使用setObject:forKey:

[userDefaults setInteger:myInteger forKey:@"myInteger"];  
[userDefaults setFloat:myFloat forKey:@"myFloat"];  
[userDefaults setDouble:myDouble forKey:@"myDouble"];  
[userDefaults setObject: myString forKey:@"myString"];

NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"];

float myFloat = [userDefaultes floatForKey:@"myFloat"];

double myDouble = [userDefaultes doubleForKey:@"myDouble"];

NSString *myString = [userDefaultes stringForKey:@"myString"];

NSDate *myDate = [userDefaultes valueForKey:@"myDate"];

NSArray *myArray = [userDefaultes arrayForKey:@"myArray"];

NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"];

你可能会问一个问题:

NSUserDefautls将数据存储在什么地方了???我都没有显示的指定路径???

用NSUserDefaults存储的数据下次程序运行的时候依然存在,它把数据存储在什么地方了?如何能够清除?

其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。

比如说这个是你的程序沙盒位置

/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。

注意,设置被修改后,注意及时同步存储

[defaults synchronize]

此方法将会强制保存为保存的修改,并且将未修改的设置同步到defaults中

注册默认值

//第一次启动APP,设置默认值

1.如果不设置,则从NSUserDefault中读不到任何值,假如这些值没被修改过的话。

2.registerDefaults方法会判断是否有该keyvalue,如果有则说明用户已经设置过,不再修改。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

{

NSDictionary *defaults = @{

kWarpDriveKey : @YES,

kWarpFactorKey : @5,

kFavoriteSinKey : @"Greed"};

[[NSUserDefaults standardUserDefaults] registerDefaults: defaults];

return YES;

}

NSDictionary的快捷创建方法

@{key:value, key:value,......}

NSArray的快捷创建方法:

@[obj, obj, .....]

NSNumber的快捷创建方法:

@5

@YES

@2.1

使设置实时有效

应用从后台到唤醒后,重写获取,刷新用户设置

通知,通知中心

UIApplicationWillEnterForegroundNotification

关于通知中心机制,通知的订阅与取消,响应,需要在另外个专题中详细研究。

总结:

1.重点在“设置捆绑包”的创建和编辑Root.plist文件

command+N  ->  resource  -》 settings bundle

2.通过编辑好的“设置捆绑绑”,settings应用可以读取plist文件,并生成既定的用户界面

3.在自己的app中,读取和设置用户设置,采用NSUserDefaults这个单例类

[NSUserDefaults standardUserDefaults]

objectForKey:

setObject: forKey:

在修改后,记得及时将修改同步到本地存储

synchronize

4.记得在app委托中,注册默认设置,采用方法

registerDefaults

时间: 2024-11-09 20:39:47

第12课: Application Settings and User Defaults的相关文章

从零开始学ios开发(十九):Application Settings and User Defaults(上)

在iphone和ipad中,有一个东西大家一定很熟悉,那个东西就是Settings. 这次要学习的东西说白了很简单,就是学习如何在Settings中对一个app的某些属性进行设置,反过来,在app中更改了一些属性值,也会反应到Settings中,这个功能很常用,实现起来也相对简单,但是内容还是比较多的. 首先还是对Settings进行一个简单的说明,虽然我们经常打开Settings,但是很少对Settings进行过仔细的研究,不过作为一名ios的开发人员,有这个必要对Settings进行一番探索

Spark3000门徒第12课Spark HA实战总结

今晚听了王家林老师的第12课Spark HA实战,课堂笔记以及作业如下: Spark HA需要安装zookeeper,推荐稳定版3.4.6. 1.下载zookeeper3.4.6,2.配置环境变量3.创建data logs4.vi conf/zoo.cfg5 data目录中创建myid spark-env.sh 配置HA : export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zo

安卓学习第12课——SimpleAdapter

SimpleAdapter一点也不简单,他的参数就带了5个,天哪,晕了.. 今天学的这个适配器, public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 看这个大概明白,参数分别是第一个:表示访问整个android应用程序接口,基本上所有的组件都需要,一般都写this(改天研究一下),第二个应该是这个List对象

【黑马程序员】第12课:文件上传&文件下载&注解

<pre> day12 上节内容回顾 1.jstl的标签 *if  choose *forEach <c:forEachvar="l" items="${list}"> 2.jsp开发模式 *模型一 *模型二(mvc模式) **mvc模式 ***m:模型,使用javabean ***v:视图,使用jsp ***c:控制器,使用servlet *dao模式:数据访问对象,专注于对数据库的操作 **首先创建接口,在接口里面定义操作数据库的方法 *

intellij idea 14 插件IdentifierHighlighter 报错 Could not save application settings

如果想看有哪些 intellij idea 14 常用的好插件,请移步到:http://blog.csdn.net/sunny243788557/article/details/26556967 ----------------------------------------------------------------------------------------- ==================插件更新 for idea 14================= 不知道怎么安装插件的

Intellij IDEA报错:Could not save application settings: java.io.IOException: java.lang.AssertionError: Unexpected content storage modificat

Question: i have a message saying "Could not save application settings: java.io.IOException: java.lang.AssertionError: Unexpected content storage modification" when running the apps. Anybody have an idea how to fix this? Answer: I ran into this

妙味课堂:JavaScript初级--第12课:json与数组

1.json数据格式及json语法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script> var arr1 = [ 1,2,3 ]; var arr2 = [ 4,5,6 ]; var arr3 = [ 7,8

第12课 - 实模式到保护模式(下)

不一般的jmp(s16->s32) 在16位代码中,所有的立即数默认为16位 从16位代码段跳转到32位代码段时,必须做强制转换 深入保护模式:定义显存段 为了显示数据,必须存在两大硬件:显卡 + 显示器 显卡 为显示器提供需要显示的数据 控制显示器的模式和状态 显示器 将目标数据以可见的方式呈现在屏幕上 显存的概念和意义 显卡拥有自己内部的数据存储器,简称显存 显卡的工作模式:文本模式&图形模式 在不同的模式下,显卡对显存内容的解释是不同的 可以使用专属指令或int 0x10中断改变显卡工

第12课:Spark Streaming源码解读之Executor容错安全性

一.Spark Streaming 数据安全性的考虑: Spark Streaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群运行.所以这就涉及到一个非常重要的问题数据安全性. Spark Streaming是基于Spark Core之上的,如果能够确保数据安全可好的话,在Spark Streaming生成Job的时候里面是基于RDD,即使运行的时候出现问题,那么Spark Streaming也可以借助Spark Core的容错机制自动容错. 对Executor容错主要是对数