我几天来一直试图在UISwitch
行保存tableViewController
状态无济于事。我查看了各种stackOverflow问题和响应以及Apple文档,但似乎在我的应用程序中没有任何工作。
这是我的应用代表:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"No" forKey:@"emailSwitch"];
[defaults registerDefaults:appDefaults];
[defaults synchronize];
}
我在Settings.bundle设置中有Root.plist,这似乎正常,并且将开关结果保存在应用设置中,但不在tableViewController
上。例如,如果我在设置中将其切换为“on”,当我向tableViewController
添加对象时,交换机会“关闭”。
以下是tableViewController.h文件中的相关代码:
@property (nonatomic, getter=isOn) BOOL on;
- (void)toggleValue:(id)sender;
以下是tableViewController m文件中的相关代码:
- (void)viewWillAppear:(BOOL)animated
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"emailSwitch"])
{
[emailSwitch setOn:YES animated:NO];
}
else
{
[emailSwitch setOn:NO animated:NO];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
customTableViewCell *cell = (customTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
//Code regarding cell contents here
UISwitch *switchObj = [[UISwitch alloc] initWithFrame:CGRectZero];
[switchObj addTarget:self action:@selector(toggleValue:) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
cell.accessoryView = switchObj;
return cell;
}
-(void)toggleValue:(id)sender
{
[[NSUserDefaults standardUserDefaults] setBool:emailSwitch.on forKey:@"emailSwitch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
将对象添加到tableViewController
并将UISwitch
切换为“on”时,它不会保存“on”状态。我尝试了各种方法,但没有任何工作。如果有人能告诉我我做错了什么,我真的很感激。提前感谢您提供的任何帮助。
答案 0 :(得分:2)
如果我理解你的问题,你的toggleValue方法应如下所示:
-(void)toggleValue:(UISwitch*)sw
{
[[NSUserDefaults standardUserDefaults] setBool:sw.on forKey:@"emailSwitch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}