所以我已经设置了我的设置包,它可以在iPhone的设置应用程序中运行。我想在我自己的应用程序中添加其中一个设置。我知道我可以使用InAppSettings框架,但我只想添加一个设置,而不是所有设置,而且我已经准备好了一个页面,我想要将此设置选项添加到其中。
因此,我在我的应用程序中复制了带有UISwitch的细胞,它看起来与设置的细胞相同。我的问题是,我现在如何将此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];
}和设置包,其中我有相同的UISwitch,可以通过iPhone设置应用程序加入:

编辑2:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (nil == [defaults objectForKey:@"isKgs"])
{
[defaults setBool:NO forKey: @"isKgs"];
}
else
{
}
[defaults synchronize];发布于 2011-06-25 07:27:20
如果您想使用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];
}发布于 2011-06-25 07:33:57
你应该理解aporat的建议,使用BOOL代替。但是,如果您坚持使用您的问题中的字符串,那么您将不得不这样做:
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];发布于 2011-06-25 08:20:52
在代码中的某个时刻,您将不得不检查开关状态,并将其写回userDefaults:
[[NSUserDefaults standardUserDefaults] setBool:[switch on] forKey:@"isKgsk"];
[defaults synchronize];您可以将更改写回switchChanged:函数中的userDefaults。
此外,如果你总是在didFinishLaunchingWithOptions中将你的键设置为NO :那么它永远不会反映在设置应用程序中所做的更改,它将永远是NO...这可能不是您想要的。
https://stackoverflow.com/questions/6474697
复制相似问题