2012-09-29 39 views
2

我想创建一个基类,其中所做的每一个更改都会立即保存到NSUserDefaults(当然只有KVO compilant部分),并且在实例化该类型对象(一个真正基本的,可重用的用户数据存储)时自动加载。我不打算提供一个“列表键” - 就像这个对象的每个子类一样,所以我希望有一种自动方法来观察对象的每个属性。可能观察(KVO)NSObject的每个属性?

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

+0

我对为什么对密钥的列表的子类是摆在首位,这让我觉得我有必要或有帮助的有点糊涂了可能会误解你的问题。我的理解是,你希望这个类的每个实例及其后代从plist中写入/读出。但是接下来看起来超类将处理所有的观察和写/读操作,并且子类将提供一些对其自身唯一的键集,以便超类实现可以观察所有相关的键。我错过了什么吗? –

回答

0

如果您有一组对象的属性,可以将它们保存到NSUserDefaults中的字典中。对每一个它设置,您可以创建使用此每个属性的自定义设置方法时间节省每一个属性:

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]; 
+0

声音不太自动。 :) – Geri

+0

顺便说一句,我创建了一个根类,使用一个plist文件来观察属性,以及它们的默认值。像魅力一样工作,现在任何对象的子类都会自动存储,并使用预定义的默认值进行实例化。 – Geri

+0

为什么它听起来不自动?每次在这个类或子类中设置该属性时,它都会自动保存并获取密钥是两行代码。如果要设置属性,您仍然必须以几乎相同的方式更改plist文件。或者,也许我误解了你的要求:)无论如何,很高兴听到你解决了你的问题:) –