2016-11-23 85 views
0

我试图在数字上创建一个数组,并让用户将它们保存在设备上。但是,保存数据时(使用NSUserDefaults方法)将其转换为[AnyObject]阵列。我需要将其转换为[Int]的数组。这是我目前的做法是:在[swift]中将[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)")但它崩溃说Could not cast value of type '__NSCFArray' (0x109f6ae88) to 'NSNumber' (0x108df0300).

当我尝试

let weighting = UserDefaults.standard.array(forKey: "chartData") as! [Int] 
print("\((weighting[0]))") 

我的应用程序崩溃说Could not cast value of type '__NSCFArray' (0x108190e88) to 'NSNumber' (0x107016300)

是否有任何方法来转换保存的a从[AnyObject][String][Int]

回答

0

在要保存[[Int]]类型的对象,因为chartData线

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

已经是一个数组。

删除括号,

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

它仍然给了我同样的问题。 – CoolMAn

+0

使用上面的语法,您必须将数组平坦化以将值赋给文本字段'footer1.text =“\(weighting [0])”'。基本上你必须决定数组是否应该是一个'Int'又名'[Int]'或一个'[Int]''又名'[[Int]]'的数组。 – vadian

+0

它实际上工作后玩我的代码!谢谢! – CoolMAn