2017-05-12 9 views
0

データベース内の子にアクセスしようとしていますが、前のビューの文字列をsegueで取得しています。それは悪い命令のエラーを与え続けます。シミュレータで実行した後にのみ表示されます。私たちはエラーの解決を求めています。ありがとう!文字列を持つ前のビューからswiftのfirebaseから子を呼び出すときに不正な命令エラーが発生しました2

機能:firebaseにデータにアクセスし、アップロードする

} 
    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let controller = segue.destinationViewController as! SorDViewController 
     if segue.identifier == "secondScreen" { 
      controller.textToDisplay = nameField.text 
     } 
    } 

コードは(エラーは、最初の関数に表示されます):

import Foundation 
import UIKit 
import Firebase 
import FirebaseDatabase 

class SorDViewController: UIViewController { 

    var textToDisplay: String? 

    @IBAction func postData(sender: AnyObject) { 
     let ref = FIRDatabase.database().referenceFromURL("database URL") 
     ref.child(textToDisplay!).child("Type").setValue("Singles") 
    } 

    @IBAction func postData2(sender: AnyObject) { 
     let ref = FIRDatabase.database().referenceFromURL("database URL") 
     ref.child("Type").setValue("Doubles") 
    } 

} 
+0

をよろしいです'textToDisplay'はnilではありませんか? –

+0

それを指摘した後、それはゼロとして出ています。ありがとうございました。私たちはこれをどう変えることができるか知っていますか? –

+0

'nameField'にテキストがありますか?その場合、その値が適切に保存されていない理由を調べる必要があります。いずれにしても、データベースコールを 'if let textToDisplay = textToDisplay'またはnil値に対してガードするのと同様のものにラップしたいと思うでしょう。そして、一般的には、@ IBObject以外のものを強制的に/暗黙的にアンラップすることには非常に慎重になるでしょう。もしそれが無ければクラッシュする可能性があり、それが無限にならないとすれば、最初に、変数を非オプションにする方法があるかどうかを確認する必要があります。 –

答えて

0

簡単なテストとして、変更してみてくださいあなたのこのことからprepareForSegue方法:これまで

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let controller = segue.destinationViewController as! SorDViewController 
    if segue.identifier == "secondScreen" { 
     controller.textToDisplay = nameField.text 
    } 
} 

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let controller = segue.destinationViewController as! SorDViewController 
    print("=> nameField: \(nameField.text)") 
    controller.textToDisplay = nameField.text 
} 

と、このようなtextToDisplayへの変更を追跡するためにあなたのnameField.textが実際にそれにnil以外の値を持っていることを確認してください:)また

良いアイデア倍増してください:

var textToDisplay: String? { 
    didSet { 
     print("oldValue: \(oldValue), newValue: \(textToDisplay)") 
    } 
} 
+0

ただ試しましたが、同じ正確なエラーが発生しました。他のアイデア?ありがとう –

+0

@MitchellMarkoffまた、 'textToDisplay'をあなたの' SorDViewController'コードのどこかに設定していませんか? –

+0

私たちのnameField.textにはnil値を入れてはいけません。シミュレータでは、名前の文字列で埋められています。エラーは「アンラッピング中に予期せずnilが見つかりました」と表示されます。何か案は?ありがとう –

関連する問題