gpt4 book ai didi

ios - 停止对 firebase 的查询?

转载 作者:行者123 更新时间:2023-11-28 16:12:05 25 4
gpt4 key购买 nike

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

if searchBar.text == nil || searchBar.text == "" {

inSearchMode = false

} else {

if allInterestsArray.contains(searchBar.text!.lowercaseString) {

ref.child(searchBar.text!.lowercaseString).child("users")

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in

print("this should be running")
print(searchBar.text!.lowercaseString)

let handle = roomsRef.observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in

print(snapshot.value)

if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {

print(snap)
}

}

})
}
}
else {
print("doesn't exist")
}


}
}

当我的 searchBar.text 等于我的 allInterestsArray 中的某个内容时,我正在对我的 firebase 数据库运行查询。这是在击键时检查的,我正在使用 dispatch_after 来防止在用户可能完成输入之前发送查询。

发生的情况是,如果我的“Dog”数组中有该项目,并且用户进入“dog”,然后输入一个“s”使其成为“dogs”。查询仍在发送对于狗,然后又是狗,所以我需要在我的 textDidChange 函数顶部取消查询,我认为每次击键它都会被取消,并且只有在一秒钟没有输入之后才会发送查询。

我正在考虑使用 removeHandle,但我认为这不是它的用途?

例子:

如果我的数组 = ["dog","dogs","doggies"]

用户输入的速度足够快,因此任何两个字母之间都没有完整的 1 秒(一秒是因为我设置了 dispatch_after 时间),他们输入了“dogs”。对 dog 的查询不应该消失,只是对于“狗”。

最佳答案

这个问题可以使用一个名为“keepSearching”的全局变量来解决,如下所示:

编辑:我现在还使用 NSTimer 为“keepSearching”提供一秒的时间间隔。

var keepSearching: Bool = true
var timer = NSTimer()
func timerAction() {
keepSearching = false
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

if searchBar.text == nil || searchBar.text == "" {
inSearchMode = false

}
else if(keepSearching) {

if allInterestsArray.contains(searchBar.text!.lowercaseString) {


// just in case user keeps on typing, invalidate the previous timer, before it happens.
timer.invalidate()

// schedule a new timer everytime.
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: false)

ref.child(searchBar.text!.lowercaseString).child("users")

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in

print("this should be running")
print(searchBar.text!.lowercaseString)

let handle = roomsRef.observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in

print(snapshot.value)

if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {

print(snap)
}

}

})
}
}
else {
print("doesn't exist")
}
}

关于ios - 停止对 firebase 的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439809/

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