2017-04-13 135 views
1

我一直在寻找遍及互联网和堆栈溢出,但没有找到任何我理解得足够好的东西来实现我的解决方案。 这里有很多类似的问题,但没有一个建议的解决方案为我工作,所以我会问你们。Swift:为用户搜索Firebase数据库

如何在swift中搜索我的Firebase数据库中的用户名? 在我的应用程序中,我有一个视图,应该允许用户搜索数据库中的好友。结果应该实时更新,这意味着每次用户键入或删除结果应该更新的字符。到目前为止,我所有的都是一个UISearchBar,并且没有后端代码。

因为我不知道创建这样一个功能需要什么,所以如果你们能告诉我你需要告诉我到底该做什么,那将是很酷的。 (数据库结构,代码部分...)。我不想在这里复制和粘贴无用的东西。

我真的很感谢帮助。

编辑:

这是我的数据库结构:

"users" 
    "uid" // Automatically generated 
     "goaldata" 
      "..." // Not important in this case 
     "userdata" 
      "username" 
      "email" 
      "country" 
      "..." // Some more entries not important in this case 

希望我这样做是正确的,真的不知道如何发布这个放在这里。

+0

可以请您展示Firebase数据库结构,只有这样才有可能确定适用的查询。 –

+0

@JenJose会做,只是一秒钟。 – dantheputzer

+0

@JenJose你走了,我希望能完成这项工作。 – dantheputzer

回答

4

假设火力地堡结构是这样的

实施例1:

users 
    -> uid 
     ->otherdata 
     ->userdata 
      ->username : "jen" 
      -> other keys 

    -> uid2 
     ->otherdata 
     ->userdata 
      ->username : "abc" 
      -> other keys 

并查询基于用户名,我们需要在queryOrdered查询(byChild: “用户数据/用户名”)。 queryStarting & queryEndingAt,提取从“je”开始的所有名称,并且这个“\ uf8ff”表示*(任何)。

let strSearch = "je" 
baseRef.child("users").queryOrdered(byChild: "userData/username").queryStarting(atValue: strSearch , childKey: "username").queryEnding(atValue: strSearch + "\u{f8ff}", childKey: "username").observeSingleEvent(of: .value, with: { (snapshot) in 
     print(snapshot) 
    }) { (err) in 
     print(err) 
} 

如果用户名是直接在用户节点的下方,然后尝试这个

实施例2:

users 
    -> uid 
     ->username : "jen" 
     -> other keys 

    -> uid2 
     ->username : "abc" 
     -> other keys 

的查询将被改组如下,

let strSearch = "je" 
baseRef.child("users").queryOrdered(byChild: "username").queryStarting(atValue: strSearch).queryEnding(atValue: strSearch + "\u{f8ff}").observeSingleEvent(of: .value, with: { (snapshot) in 

    print(snapshot) 

}) 

请注意这种方法是区分大小写。搜索String =“je”和“Je”的搜索结果将有所不同,查询将与案例匹配。

+0

非常感谢@JenJose!我会尽快找到我的电脑。我会尽快给您回复! – dantheputzer

+0

如何将其链接到UISearchBar?对不起,我很小菜:) – dantheputzer

+0

你必须appy在func searchBar(searchBar:UISearchBar,textDidChange searchText:String){}委托方法,并根据搜索结果重新加载表。 –