我正在考虑创建一个基类,其中所做的每个更改都会立即保存到 NSUserDefaults(当然只有 KVO 兼容部分),并在实例化该类型的对象时自动加载(一个非常基本的、可重用的用户数据存储)。
我无意为这个对象的每个子类提供一个类似“键列表”的常量,所以我希望有一种自动的方法来观察对象的每个属性。
任何想法如何做到这一点?当然只有公共 API。
我正在考虑创建一个基类,其中所做的每个更改都会立即保存到 NSUserDefaults(当然只有 KVO 兼容部分),并在实例化该类型的对象时自动加载(一个非常基本的、可重用的用户数据存储)。
我无意为这个对象的每个子类提供一个类似“键列表”的常量,所以我希望有一种自动的方法来观察对象的每个属性。
任何想法如何做到这一点?当然只有公共 API。
如果你有一个对象的一组属性,你可以将它们保存到 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];