Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在用户周围显示多个驱动程序注释(使用数据库)_Ios_Swift_Firebase_Firebase Realtime Database_Mapkit - Fatal编程技术网

Ios 在用户周围显示多个驱动程序注释(使用数据库)

Ios 在用户周围显示多个驱动程序注释(使用数据库),ios,swift,firebase,firebase-realtime-database,mapkit,Ios,Swift,Firebase,Firebase Realtime Database,Mapkit,我是新来的。是否有一种方法可以在用户周围显示多个驱动程序 import UIKit import Firebase import FirebaseAuth import FirebaseDatabase import MapKit class EmployeeTableViewController: UITableViewController, CLLocationManagerDelegate { @IBOutlet weak var jobsAvailableMap: MKMap

我是新来的。是否有一种方法可以在用户周围显示多个驱动程序

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import MapKit

class EmployeeTableViewController: UITableViewController, CLLocationManagerDelegate {

    @IBOutlet weak var jobsAvailableMap: MKMapView!

    var jobRequests : [DataSnapshot] = []
    var locationManager = CLLocationManager()
    var employeeLocation = CLLocationCoordinate2D()


    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        Database.database().reference().child("JobRequests").observe(.childAdded) { (snapshot) in
            if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
                if let employeeLat = jobRequestDictionary["employeeLat"] as? Double {

                } else {
                    self.jobRequests.append(snapshot)
                    self.tableView.reloadData()
                }
            }

        }

        Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { (timer) in
            self.tableView.reloadData()
        }

    }


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let coord = manager.location?.coordinate {
            employeeLocation = coord
        }
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return jobRequests.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "jobRequestCell", for: indexPath)

        let snapshot = jobRequests[indexPath.row]

        if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
            if let email = jobRequestDictionary["email"] as? String {
                if let lat = jobRequestDictionary["lat"] as? Double {
                    if let lon = jobRequestDictionary["lon"] as? Double {

                        let employeeCLLocation = CLLocation(latitude: employeeLocation.latitude, longitude: employeeLocation.longitude)
                        let employerCLLocation = CLLocation(latitude: lat, longitude: lon)
                        let distance = employeeCLLocation.distance(from: employerCLLocation) / 1000
                        let roundedDistance = round(distance * 100) / 100

                        cell.textLabel?.text = "\(email) - \(roundedDistance)km away"

                    }
                }


            }
        }

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let snapshot = jobRequests[indexPath.row]
       performSegue(withIdentifier: "acceptSegue", sender: snapshot)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let acceptVC = segue.destination as? AcceptJobViewController {
            if let snapshot = sender as? DataSnapshot {
                if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
                    if let email = jobRequestDictionary["email"] as? String {
                        if let lat = jobRequestDictionary["lat"] as? Double {
                            if let lon = jobRequestDictionary["lon"] as? Double {
                                acceptVC.requestEmail = email
                                let location = CLLocationCoordinate2D(latitude: lat, longitude: lon)
                                acceptVC.requestLocation = location
                                acceptVC.employeeLocation = employeeLocation
                            }
                        }
                    }
                }
            }
        }
    }

    @IBAction func logoutTapped(_ sender: Any) {
        try? Auth.auth().signOut()
        navigationController?.dismiss(animated: true, completion: nil)

    }

}

我已经知道如何通过数据库显示用户附近的驱动程序列表,现在我希望地图显示用户附近的驱动程序

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import MapKit

class EmployeeTableViewController: UITableViewController, CLLocationManagerDelegate {

    @IBOutlet weak var jobsAvailableMap: MKMapView!

    var jobRequests : [DataSnapshot] = []
    var locationManager = CLLocationManager()
    var employeeLocation = CLLocationCoordinate2D()


    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        Database.database().reference().child("JobRequests").observe(.childAdded) { (snapshot) in
            if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
                if let employeeLat = jobRequestDictionary["employeeLat"] as? Double {

                } else {
                    self.jobRequests.append(snapshot)
                    self.tableView.reloadData()
                }
            }

        }

        Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { (timer) in
            self.tableView.reloadData()
        }

    }


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let coord = manager.location?.coordinate {
            employeeLocation = coord
        }
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return jobRequests.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "jobRequestCell", for: indexPath)

        let snapshot = jobRequests[indexPath.row]

        if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
            if let email = jobRequestDictionary["email"] as? String {
                if let lat = jobRequestDictionary["lat"] as? Double {
                    if let lon = jobRequestDictionary["lon"] as? Double {

                        let employeeCLLocation = CLLocation(latitude: employeeLocation.latitude, longitude: employeeLocation.longitude)
                        let employerCLLocation = CLLocation(latitude: lat, longitude: lon)
                        let distance = employeeCLLocation.distance(from: employerCLLocation) / 1000
                        let roundedDistance = round(distance * 100) / 100

                        cell.textLabel?.text = "\(email) - \(roundedDistance)km away"

                    }
                }


            }
        }

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let snapshot = jobRequests[indexPath.row]
       performSegue(withIdentifier: "acceptSegue", sender: snapshot)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let acceptVC = segue.destination as? AcceptJobViewController {
            if let snapshot = sender as? DataSnapshot {
                if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
                    if let email = jobRequestDictionary["email"] as? String {
                        if let lat = jobRequestDictionary["lat"] as? Double {
                            if let lon = jobRequestDictionary["lon"] as? Double {
                                acceptVC.requestEmail = email
                                let location = CLLocationCoordinate2D(latitude: lat, longitude: lon)
                                acceptVC.requestLocation = location
                                acceptVC.employeeLocation = employeeLocation
                            }
                        }
                    }
                }
            }
        }
    }

    @IBAction func logoutTapped(_ sender: Any) {
        try? Auth.auth().signOut()
        navigationController?.dismiss(animated: true, completion: nil)

    }

}

我正在尝试在线查找教程,但大多数都没有连接到Firebase数据库。

您可以使用
addAnnotation
方法

Database.database().reference().child("JobRequests").observe(.childAdded) { (snapshot) in
        if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
            if let employeeLat = jobRequestDictionary["employeeLat"] as? Double {

            } else {
                self.jobRequests.append(snapshot)
                self.tableView.reloadData()
                self.addDriverAnnotation(snapshot: snapshot)
            }
        }

    }
e、 g.(不保证您可以生成以下代码)

您需要在
Database.Database()…
方法中调用此方法

Database.database().reference().child("JobRequests").observe(.childAdded) { (snapshot) in
        if let jobRequestDictionary = snapshot.value as? [String:AnyObject] {
            if let employeeLat = jobRequestDictionary["employeeLat"] as? Double {

            } else {
                self.jobRequests.append(snapshot)
                self.tableView.reloadData()
                self.addDriverAnnotation(snapshot: snapshot)
            }
        }

    }

嗨,弗兰克,你对密码做了什么?谢谢Kosuke。“let annotation=MKAnnotation()”出现错误“'MKAnnotation'无法构造,因为它没有可访问的初始值设定项”以及“Database.Database().reference().child(“JobRequests”).ob…”对不起,请使用
MKPointAnnotation
重命名
MKAnnotation
。嗨,Kosuke,它不起作用。我将“Database.Database()…”放在“func adddriveranotation(snapshot:DataSnapshot){”下,以便调用它