我想创建一个基类,其中所做的每一个更改都会立即保存到NSUserDefaults(当然只有KVO compilant部分),并且在实例化该类型对象(一个真正基本的,可重用的用户数据存储)时自动加载。我不打算提供一个“列表键” - 就像这个对象的每个子类一样,所以我希望有一种自动方法来观察对象的每个属性。可能观察(KVO)NSObject的每个属性?
任何想法如何做到这一点?当然只有公共API。
我想创建一个基类,其中所做的每一个更改都会立即保存到NSUserDefaults(当然只有KVO compilant部分),并且在实例化该类型对象(一个真正基本的,可重用的用户数据存储)时自动加载。我不打算提供一个“列表键” - 就像这个对象的每个子类一样,所以我希望有一种自动方法来观察对象的每个属性。可能观察(KVO)NSObject的每个属性?
任何想法如何做到这一点?当然只有公共API。
如果您有一组对象的属性,可以将它们保存到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];
我对为什么对密钥的列表的子类是摆在首位,这让我觉得我有必要或有帮助的有点糊涂了可能会误解你的问题。我的理解是,你希望这个类的每个实例及其后代从plist中写入/读出。但是接下来看起来超类将处理所有的观察和写/读操作,并且子类将提供一些对其自身唯一的键集,以便超类实现可以观察所有相关的键。我错过了什么吗? –