Сохранение результатов UISwitch и NSUserDefaults - PullRequest
1 голос
/ 04 февраля 2012

Я несколько дней пытался сохранить состояние 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];
}

У меня есть Root.plist в наборе Settings.bundle, и это, кажется, работает и сохраняет результаты переключения в настройках приложения, но не на tableViewController. Например, если я переключаю его на «вкл» в настройках, когда я добавляю объект к своему 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 на «вкл», он не сохраняет статус «вкл». Я пробовал разные подходы, но ничего не работает. Если бы кто-нибудь мог сказать мне, что я делаю неправильно, я был бы очень признателен. Заранее благодарим за любую помощь, которую вы можете предложить.

1 Ответ

2 голосов
/ 31 декабря 2012

Если я правильно понимаю ваш вопрос, ваш метод toggleValue должен выглядеть следующим образом:

-(void)toggleValue:(UISwitch*)sw
{
  [[NSUserDefaults standardUserDefaults] setBool:sw.on forKey:@"emailSwitch"];

  [[NSUserDefaults standardUserDefaults] synchronize];
}
...