0

在我的应用程序中,我有一个表格视图,它允许用户通过点击行来启用或禁用元素。很简单,我需要将每一行的条件存储在 userDefaults 中——无论它是否打开。我该怎么办?

我在想我可以为每行表示的对象添加一个 BOOL 属性,以判断它是否启用,但是我将如何去记住每个单独对象的属性值?

4

2 回答 2

0

您可以创建一堆设置键:

// 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"];

为此,您必须向该设置对象添加编码/解码内容......还有更多关于在这些部分周围存储自定义对象的内容。

于 2012-12-16T02:18:23.723 回答
0

您可以在每一行上使用某种 id 来识别特定行。然后您可以创建一个自定义对象并将其存储在 NSUserDefaults 中。

看看这个问题

于 2012-12-16T00:45:20.140 回答