2012-09-29 37 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文件。或者,也許我誤解了你的要求:)無論如何,很高興聽到你解決了你的問題:) –