2017-08-07 1 views
0

私は、ユーザーがバーコードをスキャンして書籍の情報を保存し、TableViewにそれらを取得できるようにするアプリケーションを構築しています。本は現在のユーザーID - >本 - >本の名前 - >タイトル、著者などの下に保管されます。下記のJSONの構造を参照してください - Firebase Swiftの異なるキーの下に保存されたデータを取り出す方法は?

JSON Data Structure

だから別の名前と新しい本が、それは「ブック」の下に追加されますスキャンするたびにとブックがあります。

すべての書籍のデータを別の名前で取得するにはどうすればよいですか?

ここで私はTableViewControllerでデータを取得しようとしているコードは、です:

var posts = [BooksFromFirebase]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //get reference to data location 
    let databaseRef = Database.database().reference() 

    //get current user id 
    let user = Auth.auth().currentUser 

    databaseRef.child("users").child((user?.uid)!).child("books").observe(.value, with: { (snapshot) in 

     if let value = snapshot.value as? [String: AnyObject]{ 
     let assetTitle = value["title"] as? String ?? "" 
     print("Title ",assetTitle) 
     let title = assetTitle 
     let type = "Book" 

     self.posts.insert(BooksFromFirebase(title: title, type: type), at: 0) 
     self.tableView.reloadData() 
     } 
    })  
} 
+0

エラーはどこにありますか? 'databaseRef.child(" users ")を印刷してみてください。child((user?.uid)!)child(" books ")'、あなたは目的のパスを取得しますか? – Dravidian

+0

@Dravidianにお返事いただきありがとうございます。明らかに、エラーはありません。パスは正常に動作し、データを取得しています。しかし、私のJSON構造を見れば、各書籍のタイトルの下に書籍を保管しています。だから私はどのようにそれらの中のデータを取得するために各本を呼び出すか分からない。この場合、私は各本に固有の名前を持っています。 – Miki

+0

たとえば、 'databaseRef.child( "users")。child((user?uid)!)。child( "books").child( "BOOK'S NAME")は、本の名前は異なります。 – Miki

答えて

0

は、これを使用してみてください: -

Database.database().reference().child("users/(user!.uid)/books").observeSingleEvent(of: .value, with: {(Snapshot) in 


      if let eachDict = Snapshot.value as? NSDictionary{ 

       for each in eachDict{ 

        print(each.key ?? "No Data") 
        print(each.value ?? "No Data") 
        print((each.value as! NSDictionary)["title"] ?? "No data") 

       } 
      } 

    }, withCancel: {(Err) in 

     // Handle error encountered while communicating via firebase 

    }) 
+0

ありがとう@Dravidian。 printステートメントのどれも動作しません。しかし、私はIFステートメントの直前に「each」を印刷し、これを得ました:「Snap(オックスフォードの臨床医ハンドブック){ author = "Murray Longmore"; comments = "ここにテキストを追加..."; isbn = 9780199609628; publisher = "Oxford University Press"; title = "臨床医学のオックスフォードハンドブック"; } スナップ(プログラミングインタビュー公開:あなたの次の仕事に着陸する秘密){ 著者= "ノアSuojanenとエリックGiguereジョンMongan"; comments = "ここにテキストを追加..."; isbn = 9788126512744; ' ......など – Miki

+0

回答更新... – Dravidian

+0

作品!ありがとうございました! @Dravidian – Miki

関連する問題