2016-11-02 5 views
0



Я создаю приложение в Swift, и у меня есть быстрый вопрос.

Когда пользователь входит в определенное место (например, магазин), я хочу, чтобы он отображал список элементов, сохраненных в базе данных Firebase в UITableView (может варьироваться в разных местах).

Раньше я делал кое-какие вещи в Свифт, но ничего подобного.

Помощь была бы очень признательна!

Большое спасибо,
Jake.


Показать информацию в UITableView от Firebase на основе местоположения 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

Показать вашу базу данных в формате JSON структурировать – Dravidian

+0

@Dravidian { "места": { "Кроук Парк": { "напитки": { " drink1": "Coca-Cola", " drink2": "Фанта", "drink3": "доктор Пеппер" }, "заказы": { "Фанта": { "addedByUser": "[email protected]", "завершено": ложь, «имя»: «Аарон» }, «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, с места проведения. Два метода приходит в виде

Lousy батарея Слива Метод

Всегда получить обновление своего текущего местоположения, запрос к базе данных, чтобы увидеть, если их текущее местоположение находится в пределах г. Если да, сообщите об этом, прекратите получать их местоположение и запросить Firebase.

Этот метод является самым простым в реализации, но вы искренне должны иметь серьезную проблему с вашими пользователями, если вы выберете его.

Слегка Улучшенная

  1. Сделать ОДНОГО запрос для текущего местоположения пользователя. Давайте назовем это let currentLocation = CLLocation2D()
  2. Сделать ОДНОГО запрос Firebase проверки всех мест, возможно, в пределах г; вы можете даже сказать FrB, чтобы отсортировать их для вас, а затем кешировать результаты. Из-за ограничений памяти вы можете ограничить количество результатов, чтобы сказать 10. Цель состоит в том, чтобы не хранить все данные Firebase в памяти сразу, особенно если она будет массивной. Назовем это let possibleDestinations = []
  3. Запустите таймер. Это зависит от того, находится ли ваш пользователь пешком или нет. Если пешком, то 5-10 минутный таймер довольно разумный. Если нет, тогда вам может понадобиться 1-3-минутный таймер.
  4. Когда timer == expired откат к шагу 1
    • Является currentLocation equal or close to any address in possibleDestinations
      1. Если да; то наш пользователь определенно движется к одному из адресов, которые у нас уже есть, затем timer.invalidate() и представить информацию об этом событии от possibleDestinations
      2. Если нет; вероятно, пользователь перешел свой курс, а затем повторить с шага 2

Очевидно, что второй метод является более сложным, чем первый, но его более удобным для пользователя; с точки зрения потребления батареи и эффективности.

Side Примечание:

  1. Я сделал latitude и longitude узлы магазин Double соответственно так, как вы можете просто передать их в CLLocationDegrees конструктор. Подробнее info

  2. Поскольку вы, по-видимому, относительно новы к API-интерфейсу Core Location, я бы рекомендовал сначала создать побочный проект и научиться выполнять геозащищенность, прежде чем интегрировать его в ваше приложение. Current Location Tutorial. Geofencing Tutorial.

+0

Большое спасибо Эмилю! Ты спасатель жизни! :) –

+0

@ JakeO'Toole В любое время приятель. О, э-э, боковая записка. Когда я работал с материалами гео-фехтования, я обнаружил, что запуск моего кода в реальном устройстве считается плодотворным, чем выполнение его в симуляторе. – eshirima

Смежные вопросы