2016-11-16 1 views
2

firebaseデータベースからデータを取得して辞書に格納しようとしています。 セマフォを使用しようとしていますが、NSURLSession/NSURLConnection HTTPの読み込みに失敗しました(kCFStreamErrorDomainSSL、-9806)エラー 私のinfo.plistを変更して修正しようとしました。しかし、私はそれに運がなかった。これは行く方法ではありませんか?firebaseのリクエストが進行するのを待つ問題

import UIKit 
import Firebase 

var done = false 
class ListViewController: UIViewController, UICollectionViewDelegate { 

let rootref = FIRDatabase.database().reference() 
var item_dict = Dictionary<String,[String]>() 
var item_img_dict = Dictionary<String,[String]>() 
let semaphore = DispatchSemaphore(value: 0) 
let queue = DispatchQueue.global() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = "hello!" 
    print("before calling function==========================") 
    print("go in to request") 
    DispatchQueue.global(qos: .userInitiated).async{ 
     self.rootref.child("items").observeSingleEvent(of: .value, with: { (snapshot) in 
      print("DOING SOMETHING IN FUNCTION !!!!") 
      for(type_2_container,item_list) in snapshot.value! as! Dictionary<String, AnyObject>{ 
       for(uid_container, item_detail_container) in item_list as! Dictionary<String, AnyObject>{ 
        for(uid, item_detail) in item_detail_container as! Dictionary<String, AnyObject>{ 
         let item_detail_dict = item_detail as? Dictionary<String,String> 
         if self.item_dict.index(forKey: uid as! String) != nil{ 
          self.item_dict[uid]?.append(item_detail_dict!["item_name"]!) 
          self.item_img_dict[uid]?.append(item_detail_dict!["item_image"]!) 
         }else{ 
          self.item_dict[uid] = [item_detail_dict!["item_name"]!] 
          self.item_img_dict[uid] = [item_detail_dict!["item_image"]!] 
         } 
        } 
       } 
      } 
      self.semaphore.signal() 
     }) 
    } 
    self.semaphore.wait() 
    print(self.item_dict) 
    print(self.item_img_dict) 
} 
+0

viewDidLoadで 'self.semaphore.wait()'を使うとメインスレッドをブロックすることになりますが、これは本当に悪い考えです。 firebase呼び出しで完了クロージャを使用しているのはなぜですか? – Michael

+0

私はこれに本当に新しいです。それを自分のコードに適用する方法を説明できますか –

答えて

0

ありがとうございます。

既に同じ問題が発生しています。

新しいGoogleService-Info.plistファイルをダウンロードしてから、プロジェクト内の既存のファイルに置き換えるだけです。

あなたの問題を解決します。

上記の解決方法が機能しない場合は、以下の解決方法を試してください。

ソリューション:2

1)プロジェクト(How to remove pod file

2)プロジェクトから旧GoogleService-Infoファイルを削除するからpodファイルを削除します。

3)GoogleService-Infoをダウンロードしてプロジェクトに追加します。

4)podsファイルを再度追加してください。

次にテストします。

関連する問題