gpt4 book ai didi

swift - 在 Swift 4 中使用信号量进行同步 firebase 查询

转载 作者:行者123 更新时间:2023-11-30 12:03:13 25 4
gpt4 key购买 nike

我正在尝试使用信号量让代码等待 firebase 查询结果。

代码如下:

var valor: Decimal = 0
let dateFormatter = DateFormatter()
let semaphore = DispatchSemaphore(value: 0)
dateFormatter.dateFormat = "mm/dd/yyyy"
//procedimenton para leitura dos dados no Firebase e jogar no array
Constants.refs.databaseRoot.child("Lancamentos").queryOrdered(byChild: "ContaDebito").queryEqual(toValue: "1.1.6").observe(.value, with: { snapshot in
if let snapshots = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshots {
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let post = FIRLancamento()
post.setValuesForKeys(postDict)
let credito = post.Valor
valor += Decimal(string: credito)!
print (credito + " " + String(describing: valor))

}
}
semaphore.signal()
}

})
semaphore.wait()
print(valor)

当我运行此代码时,信号量信号永远不会被触发,并且程序保持卡住状态,并且我在控制台中看到以下错误:

2017-10-26 16:55:23.830048-0400 BVI_Swift[10830:1929792] TIC TCP Conn Failed [1:0x604000169a80]: 3:-9802 Err(-9802)2017-10-26 16:55:23.831266-0400 BVI_Swift[10830:1929792] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)2017-10-26 16:55:23.831597-0400 BVI_Swift[10830:1929792] Task . HTTP load failed (error code: -1200 [3:-9802])2017-10-26 16:55:23.832476-0400 BVI_Swift[10830:1929780] Task . finished with error - code: -1200

如果我注释 semaphore.wait() 行,则查询可以正常工作,但 print(valor) 行会在它具有任何值之前执行。

最佳答案

执行此操作时会阻塞主线程吗?举个例子;如果在按钮选择器功能内运行此 block 并且不返回;所有应用程序都将卡住,因此 semaphore.signal() 永远不会执行。

尝试像这样运行该 block :

func buttonClick() {
DispatchQueue.global(qos: .background).async {
// your sync firebase operation
// ...
}
}

关于swift - 在 Swift 4 中使用信号量进行同步 firebase 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com