Nano Hash - криптовалюты, майнинг, программирование

как передать извлечение данных из firebase в Table View Controller в View Controller

Я создаю прототип приложения IOS для совместного использования автомобилей. Мое приложение связано с firebase, я могу получать и отображать данные о пути в табличном представлении, но при попытке передать данные в другой контроллер представления данные не отображаются. Ниже приведены исходные коды моего контроллера представления таблицы и контроллеров представления.

import UIKit
import Firebase

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var myIndex = 0
    var journeyList = [journeyModel]()

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return journeyList.count

    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 150
    }


    // defining firebase reference var
    var refjourney: DatabaseReference!

    @IBOutlet weak var journeyTable: UITableView!

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell", for: indexPath as IndexPath) as! journeySearchTableViewCell

        var journe: journeyModel

        journe = journeyList[indexPath.row]
        print(journe.start!, journe.destination!, journe.date!, journe.driverName!)
        cell.driverNameLabel.text = journe.driverName
        cell.startLabel.text = journe.start
        cell.destinationLabel.text = journe.destination
        cell.dateLabel.text = journe.date

        return cell

    }

На данный момент приложение работает правильно только при передаче данных другому контроллеру представления.

    override func viewDidLoad() {
        super.viewDidLoad()

        Database.database().reference().child("Journey").observe(.value, with: { (snapshot) in
            if snapshot.childrenCount > 0 {
                self.journeyList.removeAll()

                for journey in snapshot.children.allObjects as! [DataSnapshot]  {

                    let journeyObject = journey.value as? [String: AnyObject]
                    let start = journeyObject?["startingPoint"]
                    let destination = journeyObject?["destinationPoint"]
                    let driverName = journeyObject?["driverName"]
                    let date = journeyObject?["tripDate"]
                    let id = journeyObject?["id"]

                    let journey = journeyModel(destination: destination as! String?, driverName: driverName as! String?, start: start as! String?, date: date as! String?, uid: id as! String?)

                    self.journeyList.append(journey)
                }
                self.journeyTable.reloadData()
            }
        })
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        performSegue(withIdentifier: "logged", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        var bsVC: bookSetViewController = segue.destination as! bookSetViewController

    }

    @IBAction func backButton(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }
}

import UIKit

class bookSetViewController: UIViewController {

    var getStart = String()
    var getStop = String()
    var getDate = String()
    var getDriver = String()

    @IBOutlet weak var startingLabel: UILabel!
    @IBOutlet weak var stopingLabel: UILabel!
    @IBOutlet weak var daterLabel: UILabel!
    @IBOutlet weak var driveLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        startingLabel.text! = getStart
        stopingLabel.text! = getStop
        daterLabel.text! = getDate
        driveLabel.text! = getDriver

    }
 }

import UIKit

class journeySearchTableViewCell: UITableViewCell {

    @IBOutlet weak var startLabel: UILabel!
    @IBOutlet weak var destinationLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var driverNameLabel: UILabel!
}

import UIKit

class journeyModel: NSObject {

    var driverName: String?
    var start: String?
    var destination: String?
    var date: String?
    var uid: String?


    init(destination: String?, driverName: String?, start: String?, date: String?, uid: String?) {

        self.driverName = driverName
        self.start = start
        self.destination = destination
        self.date = date
        self.uid = uid

    }
}
12.11.2017

Ответы:


1

Во-первых, во-первых, не делитесь всем проектом, а только теми частями, которые необходимы.

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

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

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{
    // assume you have defined journeySelected as a class-level instance of journeyModel
    journeySelected = journeyModel[indexPath.row]
    performSegue(withIdentifier: "logged", sender: self)
}

а потом

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var bsVC: bookSetViewController = segue.destination as! bookSetViewController

    bsVC.getStart = journeySelected.start
    // and for all the other fields
}
12.11.2017
  • Здравствуйте, Рассел, я пробую этот метод, но Xcode отображает «Использование пути неразрешенного идентификатора». 12.11.2017
  • ОК - моя ошибка. Я, хотя путешествие было экземпляром уровня класса! Я внес некоторые изменения в решение выше. По сути, вам нужно отслеживать конкретное путешествие, которое вы выбрали, а затем обновлять эти значения в целевом VC как часть подготовки к переходу. Ваше текущее решение требует, чтобы вы пропускали каждый элемент путешествия, но вы могли бы просто иметь экземпляр JourneyModel и сделать одно обновление. 12.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..