我的视图控制器中有一个通知,它会侦听首选项更改,然后更新声音设置。当我更改声音设置然后终止应用程序时,首选项不会持续存在。
我需要检查这些首选项并根据应用启动时保留的首选项设置声音设置
我可以从应用代表处执行此操作,如果是,如何执行此操作?
这是通知
- (void)preferencesDidChange:(NSNotification *)note
{
NSMutableArray *changedPreferences = note.object;
if ([changedPreferences containsObject:@"localPlayUISounds"]) {
[FHSSound setUISoundsEnabled:PREFS.localPlayUISounds];
}
else if ([changedPreferences containsObject:@"localPlayAlertSounds"]) {
[FHSSound setAlertSoundsEnabled:PREFS.localPlayAlertSounds];
}
else if ([changedPreferences containsObject:@"localEnablesDNDWhenDrivingCar"]) {
[self startMonitoringLocationIfEnabled];
}
}
答案 0 :(得分:0)
我会使用NSUserDefaults。 系统会为您的应用保留一组默认值。您只需在设置值时添加值,然后在didFinishLaunchingWithOptions中再次加载它们。
要保存值,请在用户更改时:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"playSound"];
[defaults synchronize];
在启动时加载它(在app委托中):
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
bool playSound = [userDefaults boolForKey:@"playSound"];
一个额外的细节:在应用程序的第一次运行时,这些值将返回NO,因此您要检测它。 我会在app delegate上做这样的事情:
int runCount = (int)[userDefaults integerForKey:@"runCount"];
if (!runCount)
{
//first run, save the predefined values
}
else
{
//not first run, load the previously saved values
}
runCount++;
[userDefaults setInteger:runCount forKey:@"runCount"];
答案 1 :(得分:0)
查看有关保存用户偏好的this answer。
一旦您的首选项被持久化,那么您可以在应用程序启动时通过提供自己的实现来重新加载它们
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
如果要在应用程序返回到前台时恢复声音设置,即使激活之间没有被杀死,也可以考虑为UIApplicationDidBecomeActiveNotification
事件注册处理程序。
答案 2 :(得分:0)
数据已经存在,我只需找到一种方法让应用程序启动持久数据。这就是我做的事情
- (void)viewDidLoad
{
[super viewDidLoad];
[self setSoundPreferences];
}
通知设置为侦听首选项中的更改
- (void)preferencesDidChange:(NSNotification *)note
{
NSMutableArray *changedPreferences = note.object;
if ([changedPreferences containsObject:@"localPlayUISounds"]) {
[FHSSound setUISoundsEnabled:PREFS.localPlayUISounds];
}
else if ([changedPreferences containsObject:@"localPlayAlertSounds"]) {
[FHSSound setAlertSoundsEnabled:PREFS.localPlayAlertSounds];
}
最后在启动时设置首选项
#pragma mark (launch)
- (void)setSoundPreferences
{
[FHSSound setUISoundsEnabled:PREFS.localPlayUISounds];
[FHSSound setAlertSoundsEnabled:PREFS.localPlayAlertSounds];
}