首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将NSUserDefaults连接到UISwitch?

如何将NSUserDefaults连接到UISwitch?
EN

Stack Overflow用户
提问于 2011-06-25 07:22:24
回答 3查看 2.9K关注 0票数 0

所以我已经设置了我的设置包,它可以在iPhone的设置应用程序中运行。我想在我自己的应用程序中添加其中一个设置。我知道我可以使用InAppSettings框架,但我只想添加一个设置,而不是所有设置,而且我已经准备好了一个页面,我想要将此设置选项添加到其中。

因此,我在我的应用程序中复制了带有UISwitch的细胞,它看起来与设置的细胞相同。我的问题是,我现在如何将此UISwitch连接到我的NSUserDefaults,以便它作为设置UISwitch发挥作用

在我的appDelegate中,我有:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"No" forKey:@"isKgs"];
[defaults registerDefaults:appDefaults];
[defaults synchronize];

编辑-所有相关代码:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey: @"isKgs"];
    [defaults synchronize];
}

我希望UISwitch所在的应用程序中的单元格

代码语言:javascript
复制
- (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];
}

和设置包,其中我有相同的UISwitch,可以通过iPhone设置应用程序加入:

编辑2:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (nil == [defaults objectForKey:@"isKgs"])
{
    [defaults setBool:NO forKey: @"isKgs"];
}
else
{

}
[defaults synchronize];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-25 07:27:20

如果您想使用UISwitch,那么使用布尔变量会更容易。在应用程序委托中,设置设置的默认值(如果不存在):

代码语言:javascript
复制
// 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设置中的值打开开关:

代码语言:javascript
复制
 UISwitch* testSwitch = [[[UISwitch alloc] init] autorelease];
 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"testSwitch"]) {
    [testSwitch setOn:YES animated:NO];
 }
票数 2
EN

Stack Overflow用户

发布于 2011-06-25 07:33:57

你应该理解aporat的建议,使用BOOL代替。但是,如果您坚持使用您的问题中的字符串,那么您将不得不这样做:

代码语言:javascript
复制
   if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"isKgs"] isEqualToString:@"No") {
      [switch setOn:NO animated:NO];
   }

但是,如果您使用BOOL,则可以在一行中设置开关:

代码语言:javascript
复制
   [switch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"isKgs"] animated:NO];

这意味着您必须返回并设置默认值,如下所示:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey@"isKgs"];
[defaults synchronize];
票数 1
EN

Stack Overflow用户

发布于 2011-06-25 08:20:52

在代码中的某个时刻,您将不得不检查开关状态,并将其写回userDefaults:

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] setBool:[switch on] forKey:@"isKgsk"];
[defaults synchronize];

您可以将更改写回switchChanged:函数中的userDefaults。

此外,如果你总是在didFinishLaunchingWithOptions中将你的键设置为NO :那么它永远不会反映在设置应用程序中所做的更改,它将永远是NO...这可能不是您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6474697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档