我是Swift和xCode的新手,如果我的某些术语不正确,请道歉。
我刚刚开始学习CoreData,并且正在尝试生成一个基本功能,用户可以在其中创建“位置”。
我使用属性名称(type = string),纬度(type = double)和经度(type = double)设置数据模型。
我已经设置了一个TableViewController(工作正常),其中有一个segue到另一个控制器,该控制器设置为允许人们输入名称,纬度和经度。
据我所知,除了读取我连接到纬度和经度插座的文本字段的两行代码外,所有内容都设置正确。此代码包含在AddLocationController中。
任何帮助将不胜感激!
@IBOutlet var nameTextField:UITextField!
@IBOutlet var latitudeTextField:UITextField!
@IBOutlet var longitudeTextField:UITextField!
@IBAction func save(sender: AnyObject) {
if let appDelegate = (UIApplication.shared.delegate as? AppDelegate) {
location = LocationMO(context: appDelegate.persistentContainer.viewContext)
location.name = nameTextField.text
// This is where the error occurs
location.latitude = latitudeTextField.text
location.longitude = longitudeTextField.text
print("saving data to context ...")
appDelegate.saveContext()
}
dismiss(animated: true, completion: nil)
}
}
答案 0 :(得分:3)
试试这种方式
location.latitude = Double(latitudeTextField.text)
location.longitude = Double(longitudeTextField.text)
下面给出的例子
let str:String = "5.0"
if let myd:Double = Double(str)
{
print(myd)
}
答案 1 :(得分:0)
您的问题是您正在尝试将字符串值赋予double。 为了解决这个问题并避免应用程序崩溃,如果文本无法转换为double,请使用:
if let lat = latitudeTextField.text as? Double{
location.latitude = lat
}
if let long = longitudeTextField.text as? Double{
location.longitude = long
}
通过这种方式,如果其中一个文本无法转换为双倍,您的应用程序将不会崩溃,但位置经度或纬度将保持不变。