2011-02-27 11 views
0

UITableViewCellのアクセサリにチェックマークを設定し、NSUserDefaultsに書き込むには、以下のコードを使用しています。しかし、それは適切に動作していないようです。 NSUserDefaultは決して設定されていないようです。あなたが問題を見ることができるなら、それを指摘してください。UITableViewチェックマークのみ選択する

- (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]; 
*/ 
} 

私はまた、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"]; 
} 

答えて

2

デフォルトでは、NSUserDefaultsはアプリケーションがメモリからアンロードされる直前に保存します。私が遭遇した問題は、Xcodeからアプリケーションを終了すると、さまざまなクリーンアップメソッドが呼び出されないということです。既定でオブジェクトを保存した後に[[NSUserDefaults standardUserDefaults] synchronize];をコードに追加します。これにより、NSUserDefaultsは強制的にその時点で未保存の変更を保存します。

関連する問題