在我的应用程序中,我有一个tableview,允许用户通过点击行来启用或禁用元素。很简单,我需要在userDefaults中存储每一行的条件 - 如果它已打开,或者不是。我该怎么做呢?
我原以为我可以为每个行代表的对象添加一个BOOL属性,无论它是否已启用,但我将如何记住每个对象的属性值?
答案 0 :(得分:0)
您可以在每一行上使用某种ID来识别特定行。然后,您可以创建自定义对象并将其存储在NSUserDefaults中。
答案 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"];
要做到这一点,你必须将编码/解码内容添加到该设置对象...还有更多关于在这些部分周围存储自定义对象。