iOS:在userDefaults中存储选定的表视图行

时间:2012-12-16 00:42:16

标签: ios nsuserdefaults

在我的应用程序中,我有一个tableview,允许用户通过点击行来启用或禁用元素。很简单,我需要在userDefaults中存储每一行​​的条件 - 如果它已打开,或者不是。我该怎么做呢?

我原以为我可以为每个行代表的对象添加一个BOOL属性,无论它是否已启用,但我将如何记住每个对象的属性值?

2 个答案:

答案 0 :(得分:0)

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

Look at this so question

答案 1 :(得分: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"];

要做到这一点,你必须将编码/解码内容添加到该设置对象...还有更多关于在这些部分周围存储自定义对象。