2016-11-16 21 views
2

我试图等待从我的firebase数据库检索数据并将其存储在字典中。 我想使用信号量这样做,但我得到了一个N​​SURLSession/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

感谢您提出问题。

已经面临同样的问题。

您只需下载新的文件,然后替换为项目中的现有文件。

它会解决你的问题。

如果上述解决方案不适合您,请尝试下面的解决方案。

解决方案:2

1)从项目(How to remove pod file

2)从项目中删除旧文件GoogleService-Info文件pod

3)下载GoogleService-Info并添加到项目中。

4)再次添加pods文件。

然后做测试。