前提・実現したいこと
初めまして、Swift初心者です。
LINEのようなチャットアプリを作っています。
友達一覧画面から、友達を選択してトーク画面に遷移したら、
上のナビゲーションバーのタイトルがその友達の名前になっているようにしたいです。
FirebaseのDatabaseに登録したユーザー名を取得する方法を使っています。
エラーなくビルドはできますが、いざ友達の名前をタップしてトーク画面に行くと、
フリーズしてしまいます。
アドバイス頂けますと幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional
該当のソースコード
Swift
1 2//ChatVCクラス(トーク画面のView Controller)内の一部抜粋。 3 4@IBOutlet weak var nav: UINavigationItem! 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 // Do any additional setup after loading the view. 10 DBProvider.Instance.delegate = self; 11 DBProvider.Instance.getSingleName(); 12 } 13 14//DBProviderクラス 15 func getSingleName() { 16 17 contactsRef.observeSingleEvent(of: DataEventType.value) { 18 (snapshot) in 19 20 if let dictionary = snapshot.value as? [String: AnyObject]{ //オプショナル型の変数を普通の変数にアンラップ。 21 //dictionaryがnilじゃなければ 22 print("TIRED") //TIREDはちゃんと出力される 23 ChatVC().nav.title = dictionary[Constants.NAME] as? String //titleはString。StringにAnyのValueは代入できないから、AnyをStringにキャストしないといけない。 24 //このChatVC()から始まる行が、Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional とエラーメッセージ出ます。 25 } else { //dictionaryがnilなら、 26 print("value is nil") 27 } 28 29 } 30 } 31 32//DBProviderクラス内。これは他のクラスから呼び出していて、Firebaseのデータベースにはちゃんとユーザー登録できるようになっています。 33 func saveUser(name: String, withID: String, email: String, password: String) { 34 let data: Dictionary<String, Any> = [Constants.NAME: name, Constants.EMAIL: email, Constants.PASSWORD: password]; 35 36 contactsRef.child(withID).setValue(data); 37 38 } 39 40 41class Constants { 42 43 static let CONTACTS = "Contacts"; 44 static let NAME = "name"; 45 static let EMAIL = "email"; 46 static let PASSWORD = "password"; 47 48} 49 50
試したこと
1ヶ月くらいコードをあれこれいじってみましたが一向に解決できず。。。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/10 09:02
2018/02/10 11:56