2017-01-21 3 views
1

snapshot.valueを呼び出すと、突然数週間うまく動作していたコードがnull値を返しています。ここに私のDBの写真です:Firebase iOS - 値が存在することを知っているとスナップショットが突然nullになる

enter image description here

私のコードは次のとおりです。

_ = ref.child("profiles").child((empID as!FIRDataSnapshot).value as! String).child("nickname").observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 

     print(snapshot) 

     self.names.append((snapshot).value as! String) 
}) 

私はからのスナップショットを作成しようとしているREFを印刷するとき、私はリンクをコピーして貼り付けます私のブラウザに、それが正しく、この画面に私を取る:

enter image description here

は、だから私は、私はそれを言うのスナップショットを印刷する理由はわかりませんs

Snap (nickname) <null> 

明らかに価値がある場合があります。その後、ニックネームをリストに追加しようとする行に例外がスローされます。誰でもこれがどのように可能か知っていますか?特に、私はこのコードを数週間で変えることを思い出さないので、特にそうです。私が最近コードを変更していない間に、私が行った唯一のことは、TestFlightに自分のアプリをアップロードして、ダウンロードした人がいくつかいたということです。私はこの特定の呼び出しの前に別​​のスナップショットから値を取得しているので、これが当てはまるとは思わない。ありがとう!

+0

は子供が文字列としてEMPID追加してみてください。 empid = empidを次のようにして、最初に安全にキャストできます!文字列 – i6x86

+0

refのURLをブラウザに入れてから動作しますので、これは問題ですか?私はそれを試してみます – Alex

+0

私はエラーがあると思いますあなたが子としてempIDの値を追加したので、それが動作すれば私は答えのように投稿します。 – i6x86

答えて

0

あり、これを行うために別の/より良い方法かもしれませんが、あなたの目的のために、次のように動作します:

まず、のようなので、Profile.swiftファイルのプロファイルモデルを作成します。

import UIKit 

class Goal: NSObject { 
    var nickname: String? 
    var type: String? 
} 

さて、あなたはこれを行うことができます。

let profiles = [Profile]() 

ref.child("profiles").child(empID).observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
     if let dictionary = snapshot.value as? [String : AnyObject] { 

      let profile = Profile() 

      profile.setValuesForKeys(dictionary) 
      for item in dictionary { 

       if item.key == "nickname" { 

         print(item) 
         // do whatever logic you wanna do with item here - item will be set to the value of key "nickname" 

       } 
      } 

     } 
    }) 
関連する問題