【问题标题】:Saving and Loading settings by NSUserDefault on UIswitches XcodeNSUserDefault 在 UIswitches Xcode 上保存和加载设置
【发布时间】:2013-01-29 11:24:59
【问题描述】:

我有一个设置视图,我在其中为用户提供了更改其设置的选项。

设置视图有一个table view,有2 个UISwitches。我需要有关 NSUserdefaults 保存状态的方法的帮助,以及如何编写代码来加载我的值。

这是我目前的代码

In `cellForRowAtIndexPath` method:

      [cell.switchButton addTarget:self action:@selector(switchButtonTapped:) forControlEvents:UIControlEventValueChanged];



    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"myBool"];
    BOOL hBool = [[ NSUserDefaults standardUserDefaults] boolForKey:@"myBool"];

    NSLog(@"tag %i", tappedSwitch.tag);

    if (cell.switchButton.tag == 0) {
        [cell.switchButton setOn:hBool];

    }    
return cell;
}



    - (void) switchButtonTapped: (id) sender {

            tappedSwitch = (UISwitch *) sender;
        switch (tappedSwitch.tag) {
            case 0:
                passcodeSwitchIsOn = tappedSwitch.isOn;
                if (passcodeSwitchIsOn) {

                    GCPINViewController *PIN = [[GCPINViewController alloc]
                                                initWithNibName:nil
                                                bundle:nil
                                                mode:GCPINViewControllerModeCreate];
                    PIN.messageText = @"Enter a passcode";
                    PIN.errorText = @"The passcodes do not match";
                    PIN.title = @"Set Passcode";
                    PIN.verifyBlock = ^(NSString *code) {
                    NSLog(@"setting code: %@", code);
                    code = saveString; 
                    return YES;
                        };
                    [PIN presentFromViewController:self animated:YES];
                    [PIN release];
     // method of saving                    
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
                [defaults setBool:passcodeSwitchIsOn forKey:@"myBool"];
                [defaults synchronize];
                }

                break;
            case 1:
                bluetoothSwitchIsOn = tappedSwitch.isOn;
                if (bluetoothSwitchIsOn) {

                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Bluetooth Switch" message:@"Bluetooth Switch is ON" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
                    [alert show];
                    [alert release];

                }

                break;

            default:
                break;
        }
            [settingsTable reloadData];
    }

【问题讨论】:

标签: iphone xcode uiswitch


【解决方案1】:

创建对用户默认值的引用:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

设置一个值:

[defaults setBool:1 forKey:@"bluetooth"];

您可以在蓝牙关闭时将其设置回 0:

[defaults setBool:0 forKey:@"bluetooth"];

用户默认值由您选择的字符串标识。在这种情况下:@“蓝牙”。默认值将为零,直到您创建它并将其设置为其他值。

所以你可以说:

if (!bluetooth) // bluetooth is off
else  // bluetooth is on

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

【讨论】:

    【解决方案2】:

    这可用于处理您的问题。

    IBOutlet UISwitch * swi_yourswitch;
    @property(nonatomic,retain)  UISwitch * swi_yourswitch;
    

    实现

    @synthesise swi_yourswitch;
    
    - (void) switchButtonTapped: (id) sender {
        UISwitch * switchObj = (UISwitch*)sender;
        if(switchObj == self.swi_yourswitch){
            if (self.swi_yourswitch.on){
    
                NSLog(@"On");
            }
            else{
                NSLog(@"Off");
                [self.swi_yourswitch setOn:0];
            }
        }
    

    存储价值

    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"mybool"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    获取储值

    [NSUserDefaults standardUserDefaults] valueForKey:@"mybool"]
    

    【讨论】:

    • 什么是 swi_yourswitch?我猜 valueForKey 用于 NSString。
    • swi_yourswitch 是一个uiswitch实例。您可以检查您的开关是否被点击。您也可以在设置页面中声明任意数量的开关。
    • 为了获取存储的字符串值,我们使用键值..希望您理解这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多