2017-04-11 5 views
1

私はSwiftとxCodeの初心者ですので、私の専門用語が間違っていると謝ります。'String?'型の値を割り当てることができません。 「Double」というエラーを入力する

私はCoreDataの学習を始め、ユーザーが「場所」を作成できる基本的な機能を作り出そうとしています。

属性name(type = string)、latitude(type = double)、およびlongitude(type = double)でデータモデルを設定しました。

名前、緯度、経度を入力できるように設定された別のコントローラとのセグを使用して、TableViewController(これは正常に動作しています)をセットアップしました。

私が知る限り、緯度と経度のアウトレットに接続したテキストフィールドを読み取る2行のコードを除いて、すべてが正しく設定されています。このコードは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) 

    } 
} 

答えて

2

は自分の問題は、あなたが二重に文字列値を与えるためにしようとしているということです

location.latitude = Double(latitudeTextField.text) 
location.longitude = Double(longitudeTextField.text) 

let str:String = "5.0" 
if let myd:Double = Double(str) 
{ 
     print(myd) 
    } 
+1

これは、テキストをdoubleに変換できない場合にクラッシュする原因となります。 この場合、let文を使用する方がよいでしょう。 –

+0

ありがとう!これはトリックでした。 – joshlorschy

+0

いつもよろしくお願いします。@ joshlorschy –

0

の下に与えられ、このようにしてみてください。テキストの1アプリではないでしょうdoubleに変換することができなかった場合には、このようにして

if let lat = latitudeTextField.text as? Double{ 
location.latitude = lat 

} 
if let long = longitudeTextField.text as? Double{ 
location.longitude = long 
} 

:テキストは二重の使用にこれを変換できない場合は、これを解決し、クラッシュするようにアプリケーションを避けるために クラッシュしますが、位置の経度または緯度はゼロに留まります。

関連する問題