私のアプリには、ユーザーが行をタップして要素を有効または無効にできるテーブルビューがあります。簡単に言えば、各行の条件を userDefaults に格納する必要があります (オンになっているかどうかに関係なく)。これについてどうすればいいですか?
各行が有効かどうかを表すオブジェクトに BOOL プロパティを追加できると考えていましたが、個々のオブジェクトごとにプロパティの値を記憶するにはどうすればよいでしょうか?
私のアプリには、ユーザーが行をタップして要素を有効または無効にできるテーブルビューがあります。簡単に言えば、各行の条件を userDefaults に格納する必要があります (オンになっているかどうかに関係なく)。これについてどうすればいいですか?
各行が有効かどうかを表すオブジェクトに BOOL プロパティを追加できると考えていましたが、個々のオブジェクトごとにプロパティの値を記憶するにはどうすればよいでしょうか?
特定の行を識別できるように、各行にある種の ID を使用できます。次に、カスタム オブジェクトを作成して NSUserDefaults に保存できます。
一連の設定キーを作成するだけです:
// SET
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"setting1_ON"];
[defaults setBool:NO forKey:@"setting2_ON"];
// GET
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
bool setting1 = [defaults boolForKey:@"setting1_ON"];
bool setting2 = [defaults boolForKey:@"setting2_ON"];
または、すべての設定 (または辞書) の 1 つの配列を保存します。
// SET
NSMutableArray *settings = [NSMutableArray array];
for (UITableViewCell *c in [self.tableView subviews]) {
if (c.selected) {
[settings addObject:[NSNumber numberWithBool:YES]];
} else {
[settings addObject:[NSNumber numberWithBool:NO]];
}
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settings forKey:@"settings"];
// GET
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *mySettings = (NSMutableArray *)[defaults objectForKey:@"settings"];
setting1 = [mySettings objectAtIndex:1];
setting2 = [mySettings objectAtIndex:2];
その点で、他の2つのオプションを検討するかもしれません... 1.すべてのBOOLをセルに追加するのではなく、配列に保持し、必要に応じて保存します。2. 設定である NSObject を作成し、そこにすべてを保持してから、オブジェクト全体を保存します。
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:myApp.settings];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myEncodedObject forKey:@"settings"];
これを行うには、その設定オブジェクトにエンコード/デコードを追加する必要があります...これらのパーツの周りにカスタムオブジェクトを保存する方法は他にもあります。