UITableView Галочка только выбрать один - PullRequest
0 голосов
/ 27 февраля 2011

Я использую код ниже, чтобы установить аксессуар UITableViewCell в галочку, а затем написать в NSUserDefaults.Однако, похоже, он не работает должным образом.NSUserDefault, кажется, никогда не устанавливается.Если вы видите проблему, пожалуйста, укажите на это.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *text = [array objectAtIndex:indexPath.row];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        if ([text isEqualToString:[NSString stringWithFormat:@"%i", k10]]) {
            [defaults setInteger:k10 forKey:kNumberOfChartsToDownload];
        } else if ([text isEqualToString:[NSString stringWithFormat:@"%i", k25]]) {
            [defaults setInteger:k25 forKey:kNumberOfChartsToDownload];
        } else if ([text isEqualToString:[NSString stringWithFormat:@"%i", k50]]) {
            [defaults setInteger:k50 forKey:kNumberOfChartsToDownload];
        } else if ([text isEqualToString:[NSString stringWithFormat:@"%i", k75]]) {
            [defaults setInteger:k75 forKey:kNumberOfChartsToDownload];
        } else if ([text isEqualToString:[NSString stringWithFormat:@"%i", k100]]) {
            [defaults setInteger:k100 forKey:kNumberOfChartsToDownload];
        }
    }
    [self.navigationController popViewControllerAnimated:YES];
} 
else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];

// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
 // ...
 // Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}

Я также NSLogging NSUserDefault, когда приложение запускается.Однако целое число всегда равно 100. Пожалуйста, сделайте то же самое, если видите проблему.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults objectForKey:@"firstRun"]) {
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
}
NSInteger daysSinceInstall = [[NSDate date] timeIntervalSinceDate:[defaults objectForKey:@"firstRun"]] / 86400;
if (! [defaults objectForKey:@"first"]) {
    [defaults setObject:[NSDate date] forKey:@"first"];
}
if (daysSinceInstall == 0 && [defaults boolForKey:@"askedForSettings"] == NO) {
    if (![defaults integerForKey:kNumberOfChartsToDownload]) {
        NSLog(@"no defaults");
        [defaults setInteger:k25 forKey:kNumberOfChartsToDownload];
    } else if ([defaults integerForKey:kNumberOfChartsToDownload]) {
        NSLog(@"%i", [defaults integerForKey:kNumberOfChartsToDownload]);
    }
    [defaults setBool:YES forKey:@"askedForSettings"];
} 

1 Ответ

2 голосов
/ 27 февраля 2011

По умолчанию NSUserDefaults сохраняется непосредственно перед выгрузкой приложения из памяти. Проблема, с которой я столкнулся, заключается в том, что если вы выходите из приложения из XCode, различные методы очистки никогда не вызываются. Добавьте [[NSUserDefaults standardUserDefaults] synchronize]; в свой код после того, как вы сохраните объекты по умолчанию. Это должно заставить NSUserDefaults сохранять все несохраненные изменения в это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...