在我的应用程序中,我有一个表格视图,它允许用户通过点击行来启用或禁用元素。很简单,我需要将每一行的条件存储在 userDefaults 中——无论它是否打开。我该怎么办?
我在想我可以为每行表示的对象添加一个 BOOL 属性,以判断它是否启用,但是我将如何去记住每个单独对象的属性值?
在我的应用程序中,我有一个表格视图,它允许用户通过点击行来启用或禁用元素。很简单,我需要将每一行的条件存储在 userDefaults 中——无论它是否打开。我该怎么办?
我在想我可以为每行表示的对象添加一个 BOOL 属性,以判断它是否启用,但是我将如何去记住每个单独对象的属性值?
您可以创建一堆设置键:
// 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"];
或存储所有设置(或字典)的一个数组:
// 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"];
为此,您必须向该设置对象添加编码/解码内容......还有更多关于在这些部分周围存储自定义对象的内容。
您可以在每一行上使用某种 id 来识别特定行。然后您可以创建一个自定义对象并将其存储在 NSUserDefaults 中。