获取指定区域/国家/地区的注释(来自数据库)

时间:2016-04-01 22:12:16

标签: dictionary firebase location mapkit clplacemark

我正在开发一个适用于用户添加的位置(地标)的iOS应用。用户添加的位置包含数据(如标题和说明)。我想让用户(管理员)访问更改发送位置的数据,但仅限于城市或国家等受限区域。

我正在使用Firebase来存储位置(所以我可以在iOS和Android上使用它们),但我不知道我必须在哪个结构中存储它们。我首先想到我可以根据用户发送的CLPlacemark国家/地区属性来存储位置(例如,如果我使用placemark.country将位置发送到Firebase,等于"挪威",位置将被添加到数组" norway"在名为" locations")的主数组中。

但是MapKit响应语言是基于设备语言的,所以如果设备语言是挪威语,那么地标的国家将是" Norge"而不是"挪威"然后不会被保存到"挪威" -array。因此,我无法验证管理员是否可以访问特定国家/地区,因为这些位置可以保存在"挪威"或者" norge"或其他语言的国家名称。

如果我无法对Firebase中的位置进行排序,如何让管理员有权访问某些国家/城市的数据?

有没有办法用英语检查国家/地区名称和城市名称,然后根据英文名称将它们添加到Firebase,或者我必须将所有位置存储在一个大数组中,并在我从Firebase加载它们时对其进行验证?

1 个答案:

答案 0 :(得分:0)

您需要取消数据与Firebase中存储数据的关联方式。有100种方法可以做到这一点,但这里只有一个。

每个country_id_0都是使用childByAutoId创建的。

countries
   country_id_0
     USA: "Norway"
     Norwegian: "Norge"
   country_id_1
     USA: "France"
     Norwegian: "Frankrike"

用于存储管理员的结构。

admins
   user_id_0
      country_id_0: true
   user_id_1
      country_id_1: true

使用此结构,user_id_0具有country_id_0(挪威)的管理员权限,user_id_1可以管理country_id_1(法国)。 user_id_x是从authData.uid找到的uid。

您应用中的代码只会引用country_id_0 - 因此实际的国家/地区名称与您的代码取消关联。如果国家名称发生变化,它将不会影响您的代码;只需更新包含名称字符串的子节点。

如果您需要某种语言的实际名称,可以参考

  

国家/ country_id_1 /挪威

将返回'Frankrike'

另外,如果您正在考虑存储阵列的Firebase,可能会有更好的选择。