2016-04-01 54 views
-1

我正在开发一个iOS应用程序,可以与用户添加的位置(地标)一起使用。用户添加的位置包含数据(如标题和说明)。我想让用户(管理员)访问更改已发送位置的数据,但仅限像城市或国家这样的受限区域。获取指定地区/国家的注释(来自数据库)

我正在使用Firebase存储位置(所以我可以通过iOS和Android访问它们),但我不知道我必须在哪种结构中存储它们。我首先想到,我可以根据用户发送的CLPlacemark国家/地区属性来存储位置信息(例如,如果我通过placemark.country等于“Norway”向Firebase发送了位置信息,则该位置信息将添加到该阵列中“挪威“在名为”地点“的主阵列内)。

但是MapKit响应语言是基于设备语言的,所以如果设备语言是挪威语,那么地标的国家将是“Norge”而不是“Norway”,并且不会被保存到“norway”数组中。因此,我无法验证管理员是否可以访问特定国家/地区,因为可以使用“挪威语”或“norge”或其他语言的国家/地区名称保存地点。

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

有没有办法用英文检查国家名称和城市名称,然后根据英文名称将它们添加到Firebase中,或者是否必须将所有位置存储在一个大阵列中,并在我从火力地堡?

+0

发布问题时,您应该包含您已尝试的代码以及您的Firebase结构(包括文本请勿使用图片)。它会让我们更清楚地了解你正在努力完成的事情。我已经发布了一个答案,但你应该真的缩短你的问题,使其非常具体,并提供一个简短的代码片段。 – Jay

回答

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,可能会有更好的选择。

相关问题