2014-07-05 57 views
0

在我開發的應用程序中,我需要創建一個數組來存儲變量的值(money,這是一個double值,並在用戶輸入時進行更改一個不同的值)。這樣的想法是創建一個NSUserDefaults的關鍵數組變量:Swift:創建一個Double值的數組並將其保存到NSUserDefaults

var moneyArray:Array = NSUserDefaults.standardUserDefaults().arrayForKey("MoneyArray") 

然後我需要追加值,以便:

moneyArray.append(money) 

現在,我會再次保存數組:

NSUserDefaults.standardUserDefaults().setObject(moneyArray,forKey:"MoneyArray") 

在中間,我正在打印數組以查看值。但我無法執行此代碼。每當我運行應用程序,出現這種情況:

  1. 在我看到這個控制檯:致命錯誤:無法解開Optional.None (LLDB)
  2. 突出了我的代碼,我看到:線程1 :EXC_BAD_INSTRUCTION ...

而且我不知道我做錯了或者我應該在哪裏查找有關此的詳細信息...

+0

可以顯示的代碼行(即打印出數組的值),其實際上是崩潰?? –

+0

崩潰的行(突出顯示的那一行)是第一個創建數組的地方 –

回答

0

我覺得類型系統得到由arrayForKey困惑,因爲真的它仍然返回AnyObject!

我總是甲肝一個包裝屬性:

var myArray : Array<Double>! { 
get { 
    if let myArray: AnyObject! = NSUserDefaults.standardUserDefaults().objectForKey("myArray") { 
     println("\(myArray)") 
     return myArray as Array<Double>! 
    } 

    return nil 
} 
set { 
    println(myArray) 
    NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "myArray") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 
} 
+0

我不知道「類型系統變得困惑」是什麼意思。 OP代碼中唯一的問題是,如果未設置密鑰,array/objectForKey返回nil,因此您必須檢查該情況(如代碼中所示)。 - (在這種情況下,如果密鑰不存在,則返回一個空數組也是有意義的。) –

+0

好吧,然後使用該函數如何將貨幣值附加到數組中?原因,如果我做myArray.append它似乎並不工作(類型爲'Array '的Inmutable值只有名爲'append'的變異成員) –

+0

@MartinR不,swift運行時或編譯器經常搞砸 - 對我來說,我得到了運行時錯誤I386 INVALIDOP什麼的 - 我責怪它在迅速的測試。我必須通過聲明var作爲AnyObject的解決方法!然後鑄造它 –

相關問題