第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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。