2015-10-16 34 views
1

我已經把一個數組NSUserDefaults的(),像這樣:的iOS:如何NSUserDefaults的存儲AnyObject類型轉換爲數組

NSUserDefaults.standardUserDefaults().setObject(users, forKey: "usersArray") 
NSUserDefaults.standardUserDefaults().synchronize() 

然後我拉出來,像這樣:

fetchedUserArray = NSUserDefaults.standardUserDefaults().objectForKey("usersArray") 

問題我面臨的是,一旦從NSUserDefaults中刪除它,它的類型是NSArray,阻止我像Swift數組那樣操縱它。我曾經試過這種轉換的類型,但是編譯器無法識別變量「castedUsersArray」當它在後面的代碼,儘管在類型轉換不會引發任何錯誤使用:

var fetchedArray = NSUserDefaults.standardUserDefaults().objectForKey("usersArray") as? NSArray 
var castedUsersArray = fetchedArray as AnyObject as [String] 

我花了很長時間沒有成功。 Swift的類型限制讓我瘋狂。
謝謝
尼克

+0

'as AnyObject'並不意味着你施放了....最終你定義了這個變量的類型爲AnyObject –

+0

如果你存儲數組然後像這樣檢索NSUserDefaults.standardUserDefaults()。arrayForKey(「usersArray」) –

+2

[(Swift)存儲和檢索數組到NSUserDefaults可能重複](http://stackoverflow.com/questions/30118735/swift-storing-and-retrieving-array-to-nsuserdefaults) –

回答

0

你幾乎已經擁有它。不要將objectForKey轉換爲數組,而是將數組轉換爲包含某種類型的數組,例如您使用castedUsersArray所做的那樣。不要像使用fetchedArray那樣丟棄類型信息。

let users = ["Amy", "Bill", "Cindy"] 

NSUserDefaults.standardUserDefaults().setObject(users, forKey: "usersArray") 
NSUserDefaults.standardUserDefaults().synchronize() 

let fetched = NSUserDefaults.standardUserDefaults().objectForKey("usersArray") as? [String] ?? [] 

行尾的nil合併處理空的NSUserDefaults大小寫。

enter image description here

+0

謝謝你的幫助,但是嘗試在單獨的視圖中從NSUserDefaults()檢索數組時仍然收到錯誤。這是我得到的錯誤:「一行中的連續聲明必須用';'分隔,即使在添加';'之後,在雙重問號之間不起作用每當我嘗試在代碼中稍後使用數組時,我遇到了「使用未解析的標識符」 –

0

NSUserDefaults的有一個特定的方法,讓您的存儲字符串數組稱爲stringArrayForKey

let stringArray = ["Hello","playground"] 

店的字符串數組需要時

NSUserDefaults.standardUserDefaults().setObject(stringArray, forKey: "stringArray") 

負載它

if let loadedStringArray = NSUserDefaults.standardUserDefaults().stringArrayForKey("stringArray") { 
    print(loadedStringArray) // ["Hello", "playground"] 
} 
相關問題