Я пытаюсь получить отдельные сведения о событии, чтобы создать их экземпляр в новом контроллере представления, но я не могу понять, как я ошибаюсь, просто печатая название события, когда я нажимаю аннотации, которые появляются на карта, любая помощь приветствуется
MapViewController :
class MapViewController: UIViewController {
var userRides: [UserRides] = []
@IBOutlet weak
var HostButton: UIButton!
@IBOutlet weak
var ViewButton: UIButton!
@IBOutlet weak
var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
getRides()
NotificationCenter.default.addObserver(self, selector: #selector(refreshRides), name: Notification.Name("refresh"), object: nil)
}
@objc func refreshRides(notification: NSNotification) {
getRides()
}
func getRides() {
let db = Firestore.firestore()
db.collection("Events").getDocuments() {
(snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
let documents = snapshot!.documents
try !documents.forEach {
document in
let userRides: UserRides =
try document.decoded()
print(userRides.rideName)
self.userRides.append(userRides)
}
for ride in 0.. < self.userRides.count {
let mapPins = EventAnno()
let rides = self.userRides[ride]
mapPins.title = rides.rideName
mapPins.myRide = rides
let coordinate = CLLocationCoordinate2D(latitude: rides.rideYCordinate, longitude: rides.rideXCordinate)
mapPins.coordinate = coordinate
self.mapView.addAnnotation(mapPins)
print(self.userRides.count)
}
}
}
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if let eventAnnotation = view.annotation as ? EventAnno {
let theEvent = eventAnnotation.myRide
print(theEvent ? .rideName ? ? "ride name")
}
}
}
class EventAnno: MKPointAnnotation {
var myRide: UserRides ?
}
UserRides :
struct UserRides: Decodable{
let rideDate : String
let rideLeader : String
let rideLeaderUID : String
let rideLocation : String
let rideName : String
let rideType: String
let rideXCordinate : Double
let rideYCordinate : Double
}
---- -------------------------- РЕДАКТИРОВАТЬ ----------------------- -------
ниже - моя вторая попытка MapViewController получить его под другим углом, но безрезультатно.
class MapViewController: UIViewController{
var userRides:[UserRides] = []
@IBOutlet weak var HostButton: UIButton!
@IBOutlet weak var ViewButton: UIButton!
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
getRides()
NotificationCenter.default.addObserver(self, selector: #selector(refreshRides), name: Notification.Name("refresh"), object: nil)
mapView.delegate = self
}
@objc func refreshRides (notification: NSNotification){
getRides()
}
func getRides(){
let db = Firestore.firestore()
db.collection("Events").getDocuments() { (snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
let documents = snapshot!.documents
try! documents.forEach{document in
let userRides: UserRides = try document.decoded()
print(userRides.rideName)
self.userRides.append(userRides)
}
for ride in 0..<self.userRides.count {
let mapPins = MKPointAnnotation()
let rides = self.userRides[ride]
mapPins.title = rides.rideName
let coordinate = CLLocationCoordinate2D(latitude: rides.rideYCordinate, longitude: rides.rideXCordinate)
mapPins.coordinate = coordinate
self.mapView.addAnnotation(mapPins)
print(self.userRides.count)
}
}
}
}
}
extension MapViewController: MKMapViewDelegate {
func annotateMap() {
var parent: MapViewController func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let identifier="Placemark" var annotationView=mapView.dequeueReusableAnnotationView(withIdentifier: identifier) if annotationView==nil {
annotationView=MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) annotationView?.canShowCallout=true annotationView?.rightCalloutAccessoryView=UIButton(type: .detailDisclosure)
}
else {
annotationView?.annotation=annotation
}
return annotationView
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
print("\(String(describing: view.annotation?.title))")
}
}
}