-2

在同一个视图控制器类中,我使用了两个 NSUserDefaults,一个用于保存 UISwitch 状态,另一个用于 DatePicker 值。这是我的代码:

-(IBAction) switchValueChanged
{
    NSString *value = @"ON";

    NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
    if (switch1.on)
    {
        value = @"OFF";
        [userPreferences setObject:value forKey:@"stateOfSwitch"];     
        [switch1 setOn:YES animated:YES];
    }
    else
    {
        [userPreferences setObject:value forKey:@"stateOfSwitch"];

        [switch1 setOn:NO animated:YES];
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
    }
}

- (IBAction)scheduleTime
{
    NSDate *pickerTime=datePicker.date;
    [[NSUserDefaults standardUserDefaults] setObject:pickerTime forKey:@"setPickerTime"];
    [[NSUserDefaults standardUserDefaults] synchronize]; 
}

问题是,只有日期选择器的 nsuserdefault 起作用,另一个不起作用。我认为 DatePicker 的 NSUserDefault 值正在替换 UISwitch 的 NsUserDefault 值。谁能帮我解决这个问题..

4

2 回答 2

2

NSUserDefaults 缓存信息以避免每次需要默认值时都必须打开用户的默认数据库。同步方法会定期自动调用,它使内存中的缓存与用户的默认数据库保持同步。

在第一个函数中的 if/else 块之后添加一个[userPreferences synchronize];调用,然后重试。

于 2013-06-26T09:48:47.463 回答
0

试试这个代码:

if (switch1.on)
    {
        value = @"OFF";
     [[NSUserDefaults standardUserDefaults] setObject:value forKey:@"stateOfSwitch"];

        [switch1 setOn:YES animated:YES];
    }
    else
    {
       [[NSUserDefaults standardUserDefaults] setObject:value forKey:@"stateOfSwitch"];
        [switch1 setOn:NO animated:YES];
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
    }
于 2013-06-26T10:00:33.580 回答