iOS Toggles 不会在 View Controller 之间保留它们的状态

标签 ios objective-c toggle

我有几个分配给声音的开关。打开时,一段短片会播放 30 秒左右。然后当在应用程序内部的 View Controller 之间切换时(例如,到菜单页面)当我回到切换时它们都关闭了!我希望它们在打开后保留其值(value),直到用户决定关闭它们。在应用程序内的页面之间切换之前,这不是问题。

感谢您的帮助。

-(void)kickSwitchChanged:(UISwitch*)sw
{
    AppDelegate* app = [[UIApplication sharedApplication] delegate];
    [app setKickStep:sw.tag state:sw.isOn];
}

-(void)snareSwitchChanged:(UISwitch*)sw
{
    AppDelegate* app = [[UIApplication sharedApplication] delegate];
    [app setSnareStep:sw.tag state:sw.isOn];
}

最佳答案

你所拥有的听起来像是 NSUserDefaults 的一个很好的用例。

NSUserDefaults 允许您存储将在终止和重新启动您的应用程序时一直保留的数据。它旨在用于“轻量级”数据,例如用户想要打开或关闭开关。

这是保存 bool 值默认值的示例:

let kMySwitchDefaultKey = "isMySwitchOn"

NSUserDefaults.standardUserDefaults().setBool(mySwitch.on, forKey: kMySwitchDefaultKey)

这是一个检索相同 bool 值默认值的示例:

let wasMySwitchOn = NSUserDefaults.standardUserDefaults().boolForKey(kMySwitchDefaultKey)

通常您会在用户更改开关值时设置默认值,您会在类似 viewWillAppear 的地方获得默认值,并使用保存的值将开关状态更新为之前设置的状态到。

来源:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html

编辑

我没有看到您的 Obj-C 标签。这是 Obj-C 中相同的设置和获取代码。

设置

NSString* const kMySwitchDefaultKey = @"isMySwitchOn";
[[NSUserDefaults standardUserDefaults] setBool:mySwitch.on forKey:kMySwitchDefaultKey];

得到

BOOL wasMySwitchOn = [[NSUserDefaults standardUserDefaults] boolForKey:kMySwitchDefaultKey];

关于iOS Toggles 不会在 View Controller 之间保留它们的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725051/

相关文章:

iphone - 如何删除 Documents 目录的内容(而不是 Documents 目录本身)?

jquery - 点击外部时隐藏各种div

algorithm - 寻找算法(低内存占用): Toggling lights

ios - 如何从多目标应用程序中的特定 plist 获取字符串值?

ios - 使用 Xamarin 的 iOS 多路径 TCP

ios - 在 iOS 设备上推送通知

ios - 如何在 Objective-C 中将 __NSCFString 转换为 NSData

objective-c - Swift:在 didSet 中通知委托(delegate)?

iOS 用特定持续时间制作贝塞尔曲线动画

javascript - 纯JS点击元素列表显示或隐藏<divs>