2016-11-23 8 views
0

数字の配列を作成して、ユーザーがデバイスに保存させようとしています。ただし、データが保存されると(NSUserDefaultsメソッドを使用して)、[AnyObject]アレイに変換されます。私は[Int]の配列に変換する必要があります。ここでは、このに私の現在のアプローチです:迅速に[AnyObject]を[Int]に変換する3

class ProgressViewController: UIViewController { 
    let kUserDefault = UserDefaults.standard 
    var chartData = [Int]() 
    override func viewWillAppear(_ animated: Bool) { 
    let weighting = UserDefaults.standard.array(forKey: "chartData") 
    footer1.text = "\((weighting))" 
} 
    @IBAction func AddGraphComponent(_ sender: UIButton) { 
    var weighText:UITextField! 
let alert = UIAlertController(title: "Enter new Weight!", message: "Please enter your Weight, followed by the date in which your weight was recorded", preferredStyle: UIAlertControllerStyle.alert) 
alert.addTextField { (weighText) in 
    weighText.placeholder = "Weight" 
    weighText.keyboardType = UIKeyboardType.numberPad 
} 
alert.addTextField { (dateText) in 
    dateText.placeholder = "Date (MM/YY)" 
} 
let confirmAction = UIAlertAction(title: "Save", style: UIAlertActionStyle.default) { (_) in 
    let field = alert.textFields![0] as? UITextField 
    let weigh = alert.textFields![1] as? UITextField 

     if (field?.text)! == "" || (weigh?.text)! == "" { 
      let alert1 = UIAlertController(title: "Error!", message: "Please fill in BOTH fields", preferredStyle: UIAlertControllerStyle.alert) 
      alert1.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
      self.present(alert1, animated: true, completion: nil) 
     }else { 
      print((field?.text)!,(weigh?.text)!) 
      let dataInt:Int = Int((field?.text!)!)! 
      self.chartData.append(dataInt) 
      self.chartLegend.append((weigh?.text)!) 

      self.kUserDefault.set([self.chartData], forKey: "chartData") //as? [Int] 
      self.kUserDefault.set([self.chartLegend], forKey: "chartLegend") 
      self.kUserDefault.synchronize() 
} 
} 
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)) 
alert.addAction(confirmAction) 
self.present(alert, animated: true, completion: nil) 
} 

私はlet weightData: Int = weighting as [Int]を試みたが、それは私がprint("\(weighting?[0] as! Int)")を試みたが、それは私が

let weighting = UserDefaults.standard.array(forKey: "chartData") as! [Int] 
print("\((weighting[0]))") 
をしようとすると、 Could not cast value of type '__NSCFArray' (0x109f6ae88) to 'NSNumber' (0x108df0300).

を言ってクラッシュする致命的なエラー を言ってクラッシュ

私のアプリがクラッシュすると言っているCould not cast value of type '__NSCFArray' (0x108190e88) to 'NSNumber' (0x107016300)

保存された灰は[AnyObject]から[String]または[Int]から?あなたはchartData以来タイプ[[Int]]のオブジェクトを保存しているライン

self.kUserDefault.set([self.chartData], forKey: "chartData") 

答えて

0

はすでに配列です。

それはまだ私に同じ問題を与えるブラケット

self.kUserDefault.set(self.chartData, forKey: "chartData") 
+0

を削除します。 – CoolMAn

+0

上記の構文を使用すると、配列を平坦化して、テキストフィールド 'footer1.text =" \(weighting [0]) "に値を割り当てる必要があります。基本的には、配列が 'Int' aka '' '' '' '' '' '' '[[Int]]' 'の配列であると仮定しなければなりません。 – vadian

+0

実際に私のコードで遊んだ後にはうまくいきました!ありがとうございました! – CoolMAn

関連する問題