我想創建一個基類,其中所做的每一個更改都會立即保存到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中寫入/讀出。但是接下來看起來超類將處理所有的觀察和寫/讀操作,並且子類將提供一些對其自身唯一的鍵集,以便超類實現可以觀察所有相關的鍵。我錯過了什麼嗎? –