2016-05-25 1 views
0

この問題は説明するのが難しいかもしれません。ここでchildByAutoId()リファレンス(Swift)に格納されている特定のFirebaseデータを取得する

はfirebaseによって生成されるJSONです:ここでは

{ 
    "users" : { 
    "2W1Sse5kiZarFQ5k8UKjP87D8Rk2" : { 
     "PlainNote" : { 
     "-KIZYVAGZQczTSI1L4Qi" : { 
      "note" : "Finally works", 
      "title" : "Whats up" 
     }, 
     "-KIZY_M3FMW0m8mgx4Am" : { 
      "note" : "Aye", 
      "title" : "Db" 
     }, 
     "-KIZpAEsa7-wSCOJfHvv" : { 
      "note" : "This wont work for some reason", 
      "title" : "Helloo" 
     } 
     }, 
     "email" : "[email protected]" 
    }, 
    "XTjy66z8xEWtEiLx6E0mOo1JEaz2" : { 
     "email" : "[email protected]" 
    }, 
    "rfzV1saUf3RtPu7YcqJ0VyAOgmd2" : { 
     "PlainNote" : { 
     "-KIZpfbfHcePU3E8HpeU" : { 
      "note" : "Now i only see my own data", 
      "title" : "Hello" 
     } 
     }, 
     "email" : "[email protected]" 
    } 
    } 
} 

は私が迅速に各プレーンノートを生成する方法である。この後

let title = plainNoteTitleTextField.text! 
    let note = bodyOfNoteTextView.text! 
    let usersId = FIRAuth.auth()?.currentUser?.uid 

     if title != "" || note != "" { 
      let data = [ 
       "title": title, 
       "note": note 
      ] 

self.usersRef.child(usersId!).child("PlainNote").childByAutoId().setValue(data) 

、私はとリアルタイムでテーブルビューを移入しますfirebaseリアルタイムデータベース:

override func viewDidAppear(animated: Bool) { 
    var localNotes = [String]() 
    var localBody = [String]() 
    let usersId = FIRAuth.auth()?.currentUser?.uid 
    usersRef.child(usersId!).child("PlainNote").observeEventType(.ChildAdded, withBlock: { snapshot in 
     let title = snapshot.value?.objectForKey("title") as! String 
     var x = snapshot.value?.objectForKey("note") as! String 

     if x.characters.count > 20 { 
      x = x[0...20] + "..." 
     } else { 
      x = x + "..." 
     } 

     localNotes.insert(title, atIndex: 0) 
     localBody.insert(x, atIndex: 0) 
     self.notes = localNotes 
     self.noteBody = localBody 
     self.tableView.reloadData() 
    }) 
} 

問題:私はPlainNoteにアクセスしようとしていますテーブルビューのセルをタップすると、特定のノートのタイトルと本体がfirebaseから取り出せるようになります。 Firebaseは新しいメモが作成されるたびにユニークな参照を作成するため、毎回自分のデータベースを見ることなく、どうすればいいのか分かりません。

(P.S .:理解していると思うが、詳細が必要な場合は、お気軽にお問い合わせください) ありがとうございます。

+0

テーブルビューのデータソースとして配列を使用していると仮定します。テーブルビューが現在ノード2W1Sから3つのノードを表示している場合...ユーザが行1(Aye)をタップすると、なぜ配列[index = 1]からノート情報を取得できますか?オプションで、ユーザーが-KIZY_M3行をタップすると、NISを使用して-KIZY_M3の配列を検索できます。 – Jay

答えて

1

答えがまだあるかどうかはわかりませんが、ここでは同じ問題が発生しています。私が理解する方法は、毎回生成される一意のキーを取得して、単一のキーの下に格納されたデータにアクセスできるようにすることです。文字列配列を生成し、これを使用して単一のインデックスでキーの値を抽出し、その後、データ取得コードにフィードバックすることができます。これがそうのように行われます。

usersRef.child(usersId!).child("PlainNote").observeEventType(.ChildAdded, withBlock: { snapshot in 

var idKeys = [String]() //this will hold your keys 

for snap in snapshot.children.allObjects { 

let id = snap as! FIRDataSnapshot 

idKeys.append(String(id.key)) 

}} 

は今、あなたはあなたの鍵を持っている、あなたは、VAR selectedKey = idKeys [X]を使用していずれかを選択することができます。

希望します。

+0

私は実際にそれを正確にしました...しかし、私は応答を感謝します! – JacobSiegel

関連する問題