【问题标题】:UISwitch Not Responding To NSUserDefault ChangesUISwitch 不响应 NSUserDefault 更改
【发布时间】:2011-06-25 20:24:17
【问题描述】:

我的应用程序中有一个 UISwitch,我的设置包中有一个具有相同功能的 UISwitch。但是,我的应用程序中的 UISwitch 没有正确保存其设置。有人能看出代码有什么问题吗?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Set the application defaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"No" forKey:@"isKgs"];
    [defaults registerDefaults:appDefaults];
    [defaults synchronize];
}

- (void)switchChanged
{
    [[NSUserDefaults standardUserDefaults] setBool:unitSwitch.selected forKey:@"isKgs"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSLog(@"SwitchGhanged:");
}

-(void)cellForRowAtIndexPath
{
    [unitSwitch addTarget:self action:@selector(switchChanged) forControlEvents:UIControlEventValueChanged];           
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isKgs"]) 
    {
       [unitSwitch setOn:YES animated:NO];
    }
}

这里是设置包

【问题讨论】:

    标签: iphone objective-c xcode nsuserdefaults uiswitch


    【解决方案1】:
    [[NSUserDefaults standardUserDefaults] setBool:unitSwitch.on forKey:@"isKgs"];
    

    使用on 属性进行设置。

    【讨论】:

    • 如果用户从未打开过设置页面,我不需要设置注册的默认设置吗?如果应用程序从未为特定键保存值,您将获得您在 registerDefaults 中指定的值。否则,保存的值会覆盖起始值
    • 谢谢,我认为“on”而不是“selected”解决了所有问题。
    • @Faisal 你需要这样做。我的错。
    【解决方案2】:

    尝试在 UISwitch 上使用on

    [[NSUserDefaults standardUserDefaults] setBool:unitSwitch.on forKey:@"isKgs"];
    

    编辑:不需要测试,因为 unitSwitch.on 已经是布尔值,你可以直接分配它。

    【讨论】:

    • 将此添加到 cellForRow 或 switchChanged 方法?
    • 此代码应替换您的 switchChanged 方法的第一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多