2016-10-25 8 views
0

observeブロックを終了しません。スウィフト:終了していませんFirebaseがfuctionブロックを観察します

helloまたはイベントは出力されません。

データベースからフェッチすることができません。

Firebaseのデータを表示しますが、ブロック外には表示されません。例えば

:事前に

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let databaseRef = FIRDatabase.database().reference() 
    databaseRef.child("Events").queryOrderedByKey().observe(.childAdded, with: { 
     snapshot in 
     print(snapshot) 
     var temp : event = event() 
     temp.name = (snapshot.value as? NSDictionary)?["name"] as? String ?? "" 
     temp.description = (snapshot.value as? NSDictionary)?["description"] as? String ?? "" 
     temp.date = (snapshot.value as? NSDictionary)?["date"] as? String ?? "" 
     temp.price = (snapshot.value as? NSDictionary)?["price"] as? String ?? "" 
     temp.venue = (snapshot.value as? NSDictionary)?["venue"] as? String ?? "" 
     temp.genre1 = (snapshot.value as? NSDictionary)?["genre1"] as? String ?? "" 
     temp.genre2 = (snapshot.value as? NSDictionary)?["genre2"] as? String ?? "" 
     temp.img = (snapshot.value as? NSDictionary)?["img"] as? String ?? "" 

     self.events.append(temp) 
     print(self.events) 
    }) 
    print("Hello") 
    print(self.events) 
} 

ありがとう!ここ

+0

参照http://stackoverflow.com/questions/39067196/using-variables-outside-of-completion-block –

答えて

1

いくつかのこと: -

  • あなたはFIRDataEventTypeとして、childAddedを使用している、とあなたイベントノードが追加される値を取得しますと、このクエリにのみ起動されます。データベースノードの現在のデータにアクセスする場合は、valueを使用します。 firebaseデータベースに対して行われた非同期であるためcompletionBlock:

    databaseRef.child("Events").queryOrderedByKey().observe(.value, with: { 
    
  • print(self.events)文では動作しませんが、completionBlock内部のみprint(self.events)文でのみ動作する予定です。

  • あなたのviewDidLoadが呼び出されていない場合は、その時点で正しいviewControllerにいない可能性があります。

関連する問題