使用NSUserDefaults存储UISwitch状态

时间:2010-11-20 06:42:17

标签: iphone objective-c selector nsuserdefaults uiswitch

我正在尝试在我的应用程序的设置视图中保留UISwitch状态。基本上它是UITableView并包含几个开关来获取用户首选项。下面的代码解释了如何构造开关(下面只给出了一个开关结构,其他也是相同的结构)。

if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SomeIdentifierB] autorelease];
            if (syncStartupSwitch) {
                syncSwitch.on = YES;
            }else {
                syncSwitch.on = NO;
            }

            [syncSwitch addTarget:self action:@selector(syncAtStartup:) forControlEvents:UIControlEventValueChanged];


            NSLog(@"Why is this not working%@",(syncSwitch.on ? @"YES" : @"NO"));
                [cell.contentView addSubview:syncSwitch];
            cell.accessoryView = syncSwitch;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
                //cell.reuseIdentifier  = @"Cell1";
        }
        cell.textLabel.text =cellValue;
        return cell;
    }

现在,我想使用NSUserDefaults存储交换机的状态。所以在我的选择器方法实现中,我定义了NSUserDefaults,如下所示:

-(void) syncAtStartup:(id)sender {
    if ([sender isOn]) {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"YES" forKey:@"SyncAtStartup"];
        [[NSUserDefaults standardUserDefaults]synchronize];
        NSLog(@"%@",(syncStartupSwitch ? @"YES" : @"NO"));

    }else {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"NO" forKey:@"SyncAtStartup"];
            //syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

    }
}

最后,在我的viewDidLoad中,我写了这行代码:

syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

我确信我的实现缺少一些逻辑。有人可以指出这个缺陷并纠正我吗?

更新 我从@jfalexvijay那里得到了建议并使用了以下代码:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL syncStartupSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

当我查看Preferences文件夹时,我看到plist被创建了BOOL值。然后我尝试在cellForRowAtIndexPath方法中设置UISwitch状态,如下所示:

syncSwitch.on = syncStartupSwitch;

我在ApplicationWillTerminate和选择器本身中也有这行代码

[[NSUserDefaults standardUserDefaults]synchronize];

但是,在模拟器或设备上重新启动应用程序后,交换机状态仍未恢复...

上述代码中的错误是什么?

干杯,

iSee的

2 个答案:

答案 0 :(得分:3)

您可以使用以下代码;


[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

如果您使用以下代码,它将返回YES;


[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

只需测试上面的代码;

答案 1 :(得分:1)

而不是使用setObject:forKey:尝试使用setBool:forKey:。

[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];