2016-04-27 19 views
0

我這是怎麼保存的NSArray:NSUserDefaults的返回的NSDictionary,而不是NSArray的

let defaults = NSUserDefaults.standardUserDefaults() 
    for item in data as NSArray { 
     if let id = item["id"] as? String { 
      defaults.setObject(item, forKey: "Content:" + id); 
      defaults.synchronize(); 
     } 
    } 

但是,當我試圖讓存儲的數據,我不得不使用

if let content = defaults.dictionaryForKey("Content:" + contentID) {} 

否則內容爲空。但是,如果有一個簡單的方法將NSDictionary獲取到NSArray中(因爲在某些其他類中需要將數據移交給它),那就沒問題了。

我存儲NSArray的方式有什麼問題嗎?順便說一句:它是一個數組,其中的鍵是字符串。像String:AnyObject這樣的東西。

在此先感謝!

最佳 斯特凡

+0

thx eric,但我想存儲項目本身,id是爲nsuserdefaults中的對象設置一個唯一的名稱。 – SteMa

+1

我的意思是:「data」是數組,「item」是一個字典...:p – Moritz

+0

您正在將此存儲爲字典,那麼如何才能將其作爲數組進行檢索! – Lion

回答

2

我想你的對象被設置在用戶默認就好了,但你要保存在用戶的默認詞典(因爲你item是一本字典),這就是爲什麼你必須使用defaults.dictionaryForKey。你可以存儲使用

defaults.setObject(data as NSArray, forKey: "Some key"); 
+0

你是完全正確的,該項目是一個NSDictionary。 「我認爲數據項爲NSArray」 會將該項目轉換爲NSArray。那是錯誤。謝謝! – SteMa

1

if let id = item["id"] as? String 

高度懷疑整個陣列。 Array項目如何從密鑰「id」生成值?所以我認爲你不確定項目是數組還是詞典。您正在將字典存儲到userdefaults只是因爲此行

for item in data as NSArray 

是成功的。這是一個錯誤的方法。爲了清楚說明,請嘗試下面的代碼。

let mydictionary = NSMutableDictionary() 
    mydictionary.setValue("123", forKey: "abc") 
    let data = [mydictionary] 
    for item in data as NSArray { 
     if let id = item["id"] as? String { 

     } 
    } 

這裏我將一個NSMutableDictionary存儲到數據。它正在通過

for item in data as NSArray 

我希望你不要低估。

相關問題