如何将NSUserDefaults连接到UISwitch?

| 因此,我已经设置了可以在iPhone的设置应用程序中使用的设置包。我想在自己的应用程序中添加其中一项设置。我知道我可以使用InAppSettings框架,但是我只想添加一个设置,而不是所有设置,并且我已经准备好要添加此设置选项的页面。 因此,我在应用中复制了带有“ 0”的单元格,该单元格看起来与设置之一相同。我的问题是,现在我如何才能将此
UISwitch
连接到我的
NSUserDefaults
,使其用作设置
UISwitch
? 在我的appDelegate中,我有:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@\"No\" forKey:@\"isKgs\"];
[defaults registerDefaults:appDefaults];
[defaults synchronize];
编辑-所有相关代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey: @\"isKgs\"];
    [defaults synchronize];
}
我希望UISwitch在其中的应用程序内的单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
     cell.accessoryView = switchView;
     [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
     [switchView setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@\"isKgs\"] animated:NO];
     [switchView release];
}
和设置捆绑在一起,我拥有可以通过iPhone设置应用程序访问的相同UISwitch: 编辑2:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (nil == [defaults objectForKey:@\"isKgs\"])
{
    [defaults setBool:NO forKey: @\"isKgs\"];
}
else
{

}
[defaults synchronize];
    
已邀请:
        如果要使用UISwitch,则更容易使用布尔变量。在应用程序委托中,设置设置的默认值(如果不存在):
// set the default settings 
NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:@\"testSwitch\"];
if (!testValue) {
     // since no default values have been set, create them here
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@\"testSwitch\"];
     [[NSUserDefaults standardUserDefaults] synchronize];
}   
然后根据需要使用NSUserDefaults设置中的值创建打开开关的开关:
 UISwitch* testSwitch = [[[UISwitch alloc] init] autorelease];
 if ([[NSUserDefaults standardUserDefaults] boolForKey:@\"testSwitch\"]) {
    [testSwitch setOn:YES animated:NO];
 }
    
        您应该接受aporat的建议,并改为使用ѭ10。但是,如果您坚持要在问题中使用字符串,则必须执行以下操作:
   if ([[[NSUserDefaults standardUserDefaults] objectForKey:@\"isKgs\"] isEqualToString:@\"No\") {
      [switch setOn:NO animated:NO];
   }
但是,如果您使用
BOOL
,则可以将开关设置为简单的一行:
   [switch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@\"isKgs\"] animated:NO];
这意味着您必须返回并设置默认值,如下所示:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey@\"isKgs\"];
[defaults synchronize];
    
        在代码中的某些时候,您将必须检查开关状态并将其写回到userDefaults:
[[NSUserDefaults standardUserDefaults] setBool:[switch on] forKey:@\"isKgsk\"];
[defaults synchronize];
您可以在switchChanged:函数中将更改写回到userDefaults。 同样,如果您始终在didFinishLaunchingWithOptions中将密钥设置为NO:则它将永远不会反映在设置应用程序中所做的更改,它将始终为NO ....这可能不是您想要的。     

要回复问题请先登录注册