2017-02-09 5 views
-2

以下は私のコードです。私はfirebaseの政治テーブルに格納されているデータを取得しようとしており、それをSwiftのuitextviewクラスのtextviewオブジェクトに格納します。 create()関数は、Firebaseテーブルにデータを格納します。Firebaseからデータを取得するには、以下のSwiftコードでTextViewオブジェクトにデータを格納しますか?

import UIKit 
import Firebase 
import FirebaseDatabase 

class PoliticsNewsViewController: UIViewController{ 
    @IBOutlet weak var Image: UIImageView! 
    @IBOutlet weak var textView: UITextView! 
    var ref:FIRDatabaseReference! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     //Retrieval and insertion must done here currently 
     create() 
    } 

    func create() 
    { 
     //let date="9 feb 2017" 
     let text="Sidhu joins congress" 
     let aapNews="Arvind kejriwal now in race of wining wining punjab elections as he is gaining 70% seats in punjab" 
     let BJPNews="BJP sufeers major blow in punjab due to demonatization gaining only 40 seats" 
     ref=FIRDatabase.database().reference() 
     ref.child("Politics News Table").childByAutoId().setValue(["Text" : text,"AAP news" : aapNews,"BJP News" : BJPNews]) 
    } 
+1

お困りですか?あなたのコードで何が問題になっていますか?あなたの質問を関連する詳細で[編集]してください。 – rmaddy

+0

私の質問は、firebaseからデータをフェッチし、それを私のアプリケーションのuitextviewパネルにデータを表示したいので、uitextviewのtextviewオブジェクトに保存する必要があります。 –

+0

私が言ったように、関連する詳細であなたの質問を編集します。 – rmaddy

答えて

1

firebaseからデータを取得するには、Firebaseリファレンスのobserveメソッドを使用する必要があります。クロージャーを提供し、いつリスニングするかは、データベース内のデータが変更されるたびに呼び出されます。詳細については

この例を見て

ref.observe(FIRDataEventType.value, with: { snapshot in 
     guard let info = snapshot.value as? [String : AnyObject], let textToShow = info["Text"] as? String else { 
      return 
     } 
     // The snapshot is an object from firebase that is castable to 
     // an array 
     // The info array contains the information that you database has 
     // under the child that your reference has 

     textView.text = textToShow 
     //Here the textView has updated the text 
    }) 

、avaialableあるイベントタイプのように、次のリンクで見て:

https://firebase.google.com/docs/database/ios/retrieve-data

+0

ok.oneクエリ。どのような役割が[String:Anyオブジェクト]として実行されますか? –

+0

FirebaseはFIRSnapshotクラスのスナップショットを返しますが、これは実際には使用できません。 クラスは辞書としても表現できるので、キーからその値を取得するだけで、情報を取得するのが簡単になります。 FIRSnapshotクラスを、[String:Anyオブジェクト]型の辞書にキャストしていますか?オペレーター。私はとして使用している?演算子ではなく、!演算子は強制的にダウンキャストすることはありません –

+1

@FedericoOjedaいい答えですが、* callback *は実際には* closure *であるべきです。また、FIRDataSnapshotは、ノードのキーだけでなく値も含むため、多くの状況で非常に使用可能です。それを反復して子データを取得することができます。最後に、スナップショットの値によって表されるものは常に辞書であるとは限りません。それは文字列、ブールまたは配列であってもよい。それは非常に強力なクラスです。 – Jay

0

はここと一緒に行くために、より詳細な答えです正しい答えが役に立つかもしれません。

投稿があるソーシャルメディアアプリがあるとします。ここではポスト・ノードは

posts 
    -Yiias9j9asd 
    post: "a post about stuff" 
    date: "20170209" 
    -Yinjiisidd 
    post: "another post about stuff" 
    date: "20170210" 

だし、コードは、すべての記事を読み込み、Yiias9j9asdなどのノードのキー名は、childByAutoIdで作成し、一般的にされていることをログ

let postsRef = ref.child("posts") 
postsRef.observeSingleEvent(of: .value, with: { snapshot in 
    for snap in snapshot.children { 
     let postKey = postSnap.key //the key of each post 
     let postSnap = snap as! FIRDataSnapshot //the child data snapshot 
     let postDict = postSnap.value as! [String:AnyObject] //child data dict 

     let post = postDict["post"] as! String 
     let date = postDict["date"] as! String 
     print("postKey: \(postKey) post: \(post) date: \(date)") 
     //now that you have the data, you can add it to a textView 
     // textView.text = post for example 
    } 
}) 

注意にそれらを印刷しますFirebaseに個別のノード名を作成させるための推奨される方法です。

関連する問題