我想创建一个基类,每次所做的更改都会立即保存到NSUserDefaults(当然只有KVO编译部分),并且只要实例化该类型的对象(一个非常基本的,可重用的用户数据存储)就会自动加载
我无意为这个对象的每个子类提供一个“键列表” - 类似的常量,所以我希望有一种自动方法来观察一个对象的每个属性。
任何想法如何做到这一点?当然只有公共API。
答案 0 :(得分:0)
如果您有一组对象的属性,则可以将它们保存到NSUserDefaults中的字典中。要在每次设置时保存每个属性,您可以使用以下方法为每个属性创建自定义setter方法:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"yourKey"] == nil) {
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"yourObject" forKey:@"keyForYourObject"];
// Add stuff to the dictionary
[defaults setObject:dict forKey:@"yourKey"];
}else{
NSDictionary *dict = [defaults objectForKey:@"yourKey"];
// Add stuff to the dictionary
[defaults setObject:dict forKey:@"yourKey"];
}
这将为您提供存储在UserDefaults中的所有属性的单个字典。然后使用标准方法获取密钥列表:
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"yourKey"];
NSArray *keys = [dict allKeys];