可以观察(KVO)NSObject的每个属性吗?

时间:2012-09-29 23:55:39

标签: ios key-value-observing nsobject

我想创建一个基类,每次所做的更改都会立即保存到NSUserDefaults(当然只有KVO编译部分),并且只要实例化该类型的对象(一个非常基本的,可重用的用户数据存储)就会自动加载

我无意为这个对象的每个子类提供一个“键列表” - 类似的常量,所以我希望有一种自动方法来观察一个对象的每个属性。

任何想法如何做到这一点?当然只有公共API。

1 个答案:

答案 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];