2016-11-02 14 views
0



私はSwiftにアプリケーションを構築していますが、私は簡単な質問があります。

ユーザーが特定の場所(たとえばショップ)に入ると、FireTitanデータベースに保存されているアイテムのリストをUITableViewに表示する必要があります(場所が異なる場合があります)。

私は前にSwiftで場所のものを少ししましたが、このようなものはありませんでした。

助けていただければ幸いです!

ありがとうございました。
Jake。


場所に基づいてFirebaseからUITableViewの情報を表示するSwift

{ 
    "venues" : { 
    "CrokePark" : { 
     "beverages" : { 
     "drink1" : "Coca-Cola", 
     "drink2" : "Fanta", 
     "drink3" : "Dr. Pepper" 
     }, 
     "orders" : { 
     "Fanta" : { 
      "addedByUser" : "[email protected]", 
      "completed" : false, 
      "name" : "Aaron" 
     }, 
     "Coca-Cola" : { 
      "addedByUser" : "[email protected]", 
      "completed" : false, 
      "name" : "Jake" 
     } 
     } 
    } 
    } 
} 
+0

は – Dravidian

+0

@Dravidian { "会場" データベースJSON構造を表示します"ファンタ"、 "drink3": "ドクターペッパー" }、 "注文":{ "ファンタ":{ "addedByUser": "[email protected]"、 "完了":偽、 "name": "Aaron" }、 "Coca-Cola":{ "addedByUser": "[email protected]"、 は "完了":偽、 "名前": "ジェイク" } } } } }あなた構造 –

+0

更新あなたの質問は、ちょうどそれを – Dravidian

答えて

1

あなたが探しているものを達成するために、あなたは一般的にデータベースに保存されているカフェの(緯度、経度)、すなわち正確な位置を持つようにしたいと思います。あなたの会場構造はそのように見えるでしょう

"venues" : { 
"CrokePark" : { 
    "latitude": 37.335556, // this is a double 
    "longitude": -122.009167 // this is a double 
    "beverages" : { 
    "drink1" : "Coca-Cola", 
    "drink2" : "Fanta", 
    "drink3" : "Dr. Pepper" 
    } 

この場所では、検索を心配する必要があります。一般に、ユーザーが特定の半径になったときにユーザーに通知する必要があります。 r、会場から。二つの方法は、常に自分の現在位置がR内にあるかどうかを確認するために、データベースを照会し、現在の場所のアップデートを入手

みじめなバッテリー水切り方法念頭に

を来ります。はいの場合は、それらに通知して、その場所の取得をやめ、Firebaseに問い合わせます。

この方法は実装が最も簡単ですが、あなたが真剣に問題を抱えていなければなりません。

若干改善

  1. は、ユーザの現在位置についてSINGLEクエリを作成します。のはおそらくR内のすべての場所をチェックFirebaseするSINGLEクエリを作成し、このlet currentLocation = CLLocation2D()
  2. を呼ぶことにしましょう。あなたはFrBにあなたのためにそれらを並べ替えるよう指示することができますし、結果をキャッシュします。メモリの制限のため、結果の数を10に制限することがあります。これは、Firebaseのすべてのデータを一度にメモリに保存しないようにすることです。これを呼びましょうlet possibleDestinations = []
  3. タイマーを開始します。これは、ユーザーが徒歩であるかどうかによって異なります。歩いている場合、5-10分のタイマーはかなり妥当です。そうでない場合は、代わりに1〜3分のタイマーが必要です。そうならば1
    • ステップに戻ってtimer == expiredロールはcurrentLocation equal or close to any address in possibleDestinations
      1. です
      2. 。その後、私たちのユーザーは間違いなく、我々がすでに持っているアドレスのいずれか、そしてtimer.invalidate()に向かったとnoの場合possibleDestinations
      3. から会場の情報を提示しています。おそらく、ユーザは、次に、第2の方法は、最初の1が、そのよりユーザーフレンドリーよりも複雑である2

明らかステップから繰り返して、自分の進路を切り替えました。バッテリ消費の点で、そして効率的です。

側注:

  1. あなたは、単にCLLocationDegreesコンストラクタに渡すことができますように、私は、それぞれlatitudelongitudeノード店Doubleを作りました。 More info

  2. Core Location APIが比較的新しいらしいので、最初にサイドプロジェクトを作成し、アプリケーションに統合する前にジオフェンシングを実行する方法を学ぶことをおすすめします。 Current Location TutorialGeofencing Tutorial。 { "クローク・パーク"::{ "飲料":{ "drink1": "コカ・コーラ"、 "drink2":

+0

はあなたにそんなにエミールありがとうたい!あなたは命を救う人です! :) –

+0

@ JakeO'Tooleいつでも仲間。ああ、ああ、サイドノート。私は地理フェンシングのもので働いていたとき、私は実際のデバイスで自分のコードを実行すると、シミュレータでそれを行うよりも実り多いものとみなさことがわかりました。 – eshirima

関連する問題