2017-07-26 84 views
1

我有,我搜索用户的搜索栏。当我第一次搜索用户时,它显示正确的结果。但是,当我移至详细视图(对用户的配置文件)时,点击任何按钮,然后移回,值重复三次。移动时不会影响结果,不要点击任何按钮并向后移动。以下是我使用的代码片段:的tableView显示重复值

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchController.searchBar.delegate = self 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.searchBar.placeholder = "Search people (by username)" 
    definesPresentationContext = true 
    tableView.tableHeaderView = searchController.searchBar 

    requestManager.delegate = self 
} 

func updateSearchResults(_ sender: RequestManager) { 
    tableView.reloadData() 
} 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

     requestManager.resetSearch() 
     requestManager.searchUser(validatedText) 
     print("Validated text: \(validatedText)") 
} 

func searchUser(_ searchText: String) { 
     refUsers.observe(.value, with: { (snapshot) in 

      let snapshotDictionary: [String: AnyObject] = snapshot.value as! [String : AnyObject] 

      for (userKey, _) in snapshotDictionary { 

       if let usernameValue = snapshot.childSnapshot(forPath: userKey).childSnapshot(forPath: "username").value as? String 
       { 
        if usernameValue.lowercased().contains(searchText.lowercased()) { 
         let userData = JSON(snapshot.childSnapshot(forPath: userKey).value!) 


         self.searchUsers.append(userData) 
        } 

        if self.delegate != nil { 
         self.delegate?.updateSearchResults(self) 
        } 

       } 
       else { 
        print("Users could not be found.") 
       } 

      } 

     }) { (error) in 
      print(error.localizedDescription) 
     } 

} 

当我从细节视图移回时,似乎要调用结果三次?这里没有任何功能在详细视图中。

+1

的问题是不是你的tableview,但你的searchUsers。要调用每次追加和不冲水老结果 – GIJOW

回答

0

看起来像你一样initiliazed阵列要附加的数据。所以试试这种方式每当你点击按钮重新启动你的数组或检查数组中的重复条目,并相应地追加数据。无论哪种方法你都可以遵循。

+0

我试图用'self.searchUsers.removeAll清除数据(keepCapacity:假)'在searchUser()方法的第一件事情,但它似乎不工作。 – waseefakhtar

+0

一旦你删除了所有显示的数量? –

0

你可以尝试娄等。上搜索

//Original array 
var arrRes = [[String:AnyObject]]() 
//Search Array 
var searchArrRes = [[String:AnyObject]]() 
var searching:Bool = false 

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
    searchArrRes = self.arrRes.filter({(($0["branchName"] as! String).localizedCaseInsensitiveContains(searchText))}) 


    if(searchArrRes.count == 0){ 
     searching = false 
    }else{ 
     searching = true 
    } 
    self.tableView.reloadData(); 
} 

就像给条件表视图方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if(searching == true){ 
     return searchArrRes.count 
    }else{ 
     return arrRes.count 
    } 

} 

设置值到表格单元格状波纹管

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell:BranchLocationCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomCell 

    if(searching == true){ 
     cell.tv_branch_name.text = searchArrRes[indexPath.row]["branchName"] as! String 

    }else{ 
     cell.tv_branch_name.text = arrRes[indexPath.row]["branchName"] as! String 
       } 


    return cell; 
} 
1

只需从阵列添加更多之前删除对象。

self.searchUsers.removeAll() 
self.searchUsers.append(userData) 

因此,只要添加一段代码,你会好到哪里去。