2
아래 스 니펫에는 두 가지 문제가 있습니다.TableView 중복 및 파이어베이스 검색 쿼리
- 나는 내 TableView에 복제본을 가져 왔습니다.
A :
나는 결과를 반환 뭔가를 검색하고 난 결과를 돌려 다른 일을 찾고 시도
는 기존의 결과는, 예를 들어하지 않는 새로운 결과를 보여주는 일이 될 것입니다. "ola"를 검색하면 TableView는 olabode, olatunde, olaide의 목록을 반환합니다.
b. 그럼 "bisi"에 대한 검색, "bisi"에 대한 일치하는 쿼리를 찾을 경우 나는 여전히 "ola"에 대한 쿼리 결과를 얻을.
func searchView(_ searchView: AZSearchViewController, didTextChangeTo text: String, textLength: Int) {
self.resultArray.removeAll()
searchView.reloadData()
guard text != "" else {
return
}
AppFirRef.userRef.queryOrdered(byChild: "username")
.queryStarting(atValue: text)
.queryEnding(atValue: text + "\\uf8ff")
.observe(.value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("not found")
} else {
print("found")
self.resultArray.removeAll()
searchView.reloadData()
print("\(snapshot.value)")
for case let snap as FIRDataSnapshot in snapshot.children {
guard let value = snap.value as? [String : Any] else { continue }
//print("\(snap.key)")
print(value)
let user = LContact(value: value, searchUserId: snap.key)
self.set.add(user)
if let username = user.username{
self.resultArray.append(username.lowercased())
searchView.reloadData()
}
}
}
})
}
TableViewSource 새 데이터를 추가하기 전에? – apineda
@apineda 예를 들어 복제가 발생했다는 것을 알았습니다. 두 개의 다른 장치를 사용하면 장치 A가 "사용자"노드에 추가되면 장치 B의 사용자 목록에 중복이 생깁니다. 중복이 사라지기 전에 장치 b를 다시 시작하십시오. 따라서 기본적으로 "사용자"노드가 다른 장치에서 참조되는 경우 내 쿼리가 중복됩니다. – SimpiMind