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)
}
viewDidLoadで 'self.semaphore.wait()'を使うとメインスレッドをブロックすることになりますが、これは本当に悪い考えです。 firebase呼び出しで完了クロージャを使用しているのはなぜですか? – Michael
私はこれに本当に新しいです。それを自分のコードに適用する方法を説明できますか –