2011-10-05 104 views
11

你們能幫助我嗎?我發現如何保存和檢索簡單對象以將其用作應用程序設置。NSUserDefaults.StandardUserDefaults - 保存和檢索字典

NSUserDefaults.StandardUserDefaults.SetString("testUser","username"); 
NSUserDefaults.StandardUserDefaults.Init(); //Although it's strange that you have to call this method to actually save your stuff 

,以後你可以像檢索:

var username = NSUserDefaults.StandardUserDefaults.StringForKey("username"); 

現在,如果我需要什麼保存多個用戶名(多達我想)? 如果我需要使用密碼或passhashes保存多個用戶名,該怎麼辦?

回答

12

下面是陣列的例子(許多字符串保持與單個鍵):

 NSUserDefaults.StandardUserDefaults ["array"] = NSArray.FromStrings ("a", "b", "c"); 
     foreach (string s in NSUserDefaults.StandardUserDefaults.StringArrayForKey ("array")) { 
      Console.WriteLine (s); 
     } 

而且其中一個字典(鍵=值)保持與單個鍵的例子:

 NSDictionary dict = NSDictionary.FromObjectsAndKeys (new object[] { "user1", "user2" }, new object[] { "123", "abc" }); 
     NSString key = new NSString ("dict"); 
     NSUserDefaults.StandardUserDefaults.SetValueForKey (dict, key); 
     NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key); 
     for (int i = 0; i < d2.Count; i++) { 
      Console.WriteLine ("{0} : {1}", d2.Keys [i], d2.Values [i]); 
     } 
1

我會考慮使用核心數據,如果你有很多用戶你也想搜索和過濾。如果你的應用程序不那麼複雜,你總是可以將字典序列化爲一個字符串,並將其保存爲用戶默認值。 JSON(de)序列化的好庫是SBJSON http://stig.github.com/json-framework/

+0

我想過序列化的東西,但我不能通過使用NSObject.FromObject()將我的對象轉換成NSObject ...它返回null ... – Agzam

+0

你使用sbjson嗎?如果是這樣,你可以導入SBJSON.h。你的字典然後有一個新的方法jsonRepresentation,它給你的序列化的字符串。這個String然後可以保存。如果從userdefaults返回字符串,則可以在字符串上調用JSONValue,它將返回一個字典。 – huesforalice

+0

不,我試圖使用NSJsonSerialization.Serialize它會引發異常。我還沒有學習如何在MonoTouch項目中使用Objective-C庫......現在看來我必須現在 – Agzam

1

我很難讓NSUserDefaults存儲字典。我最終做的是簡單地獲取Documents目錄,並在應用程序正在終止或轉到後臺時將我的字典保存到文件中,然後在應用程序完成加載時從文件加載它。 NSDictionaryNSMutableDictionary有一個從文件中加載或保存的類方法 - 它使用序列化的XML,所以它很漂亮和優雅。

如果您的應用程序不需要大量數據,並且數據很簡單,結構流暢,這很好。