【发布时间】:2014-05-27 01:30:20
【问题描述】:
我有 2 个视图控制器...游戏设置视图控制器(包含 UISwitch)和游戏视图控制器。默认情况下,开关的状态为 ON(在情节提要中设置)。开关的功能是设置物体向上或向下。
步骤:
1.当我第一次加载游戏时,开关打开,我玩游戏并且对象根据开关设置正确移动(在这种情况下向上)。
2.我关闭并重新打开游戏,开关打开,我将其切换到关闭,我玩游戏并且对象根据开关设置正确移动(在这种情况下向下)。
[BUG] - 3. 我关闭并重新打开应用程序,开关又回到 ON(因为这是默认设置),我玩游戏时,对象没有根据开关设置正确移动。它应该向上,因为开关打开。
[解决方法] - 我必须关闭开关然后再打开才能工作。
这是我的 2 个视图控制器:
GameSettingsViewController:
.h
@property (nonatomic, strong) IBOutlet UISwitch *UISwitchInvertGravity;
.m
-(IBAction)SwitchGravity {
NSUserDefaults *GravitySwitchValue = [NSUserDefaults standardUserDefaults];
[GravitySwitchValue setBool:self.UISwitchInvertGravity.on forKey:@"SwitchOn"];
[GravitySwitchValue synchronize];
GameViewController
.m
-(void)ObjectMoving {
NSUserDefaults *GravitySwitchValue = [NSUserDefaults standardUserDefaults];
BOOL SwitchOn = [GravitySwitchValue boolForKey:@"SwitchOn"];
if (SwitchOn) {
object.center = CGPointMake(object.center.x, object.center.y + objectFlight);
objectFlight = objectFlight - 5;
if (objectFlight < -15) {
objectFlight = -15;
}
}
else {
object.center = CGPointMake(object.center.x, object.center.y - objectFlight);
objectFlight = objectFlight - 5;
if (objectFlight < -15) {
objectFlight = -15;
}
}
if (objectFlight > 0) {
object.image = [UIImage imageNamed:@"object-down.png"];
}
if (objectFlight < 0) {
object.image = [UIImage imageNamed:@"object-up.png"];
}
}
【问题讨论】:
-
我需要澄清一下,如果您不希望保留该值,为什么还要保存为用户默认值?
-
我对 Objective-c 有点陌生,所以我的澄清可能会导致您建议的重写;)当我在 1 个视图中查看所有内容时,一切正常(没有 nsuserdefault)。在将其分成 2 个视图并进行研究后,我继续阅读有关 nsuserdefault 的内容,并认为这是一种在另一个视图中保存和检索开关设置的方法。我的困惑是如何让我的开关设置反映在一个单独的 VC 中。我还希望最后一个开关设置在关闭并重新打开应用程序后保持不变。
-
所有 MethodNames 应该是 dromedarCase (这意味着第一个字母不大写)。与属性和变量相同。只有 ClassNames 应该是 CamelCase。
-
感谢您的提示。我会清理干净的。