Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
swift中的调用按钮和firestore存在问题_Swift_Firebase_Google Cloud Firestore_Mapkit_Mkannotation - Fatal编程技术网

swift中的调用按钮和firestore存在问题

swift中的调用按钮和firestore存在问题,swift,firebase,google-cloud-firestore,mapkit,mkannotation,Swift,Firebase,Google Cloud Firestore,Mapkit,Mkannotation,我在Firestore上有5个系列。使用这些集合的文档数据,我创建了不同类型的注释,并将它们显示在地图视图上 问题是,我希望传递存储在每个注释中的所有信息,并将其显示在另一个视图控制器上,该视图控制器在您按下callout按钮时显示 我想不出一种方法来引用我正在按下的注释,然后将数据传递到另一个屏幕 这是我第一次使用数据库,我没有很多经验,所以我希望能得到一些帮助 谢谢 很难给出具体的答案,因为我不知道你的全部功能。但你通常是这样做的 首先,当您创建MKAnnotation子类时,您可以定义一个

我在Firestore上有5个系列。使用这些集合的文档数据,我创建了不同类型的注释,并将它们显示在地图视图上

问题是,我希望传递存储在每个注释中的所有信息,并将其显示在另一个视图控制器上,该视图控制器在您按下callout按钮时显示

我想不出一种方法来引用我正在按下的注释,然后将数据传递到另一个屏幕

这是我第一次使用数据库,我没有很多经验,所以我希望能得到一些帮助


谢谢

很难给出具体的答案,因为我不知道你的全部功能。但你通常是这样做的

首先,当您创建
MKAnnotation
子类时,您可以定义一个属性来保存稍后可以引用的对象。例如,假设我在地图上显示餐厅和超市

class RestaurantAnnotation: NSObject, MKAnnotation {
    let restaurant: Restaurant
    
    var title: String? {
        return restaurant.name
    }
    
    var coordinate: CLLocationCoordinate2D {
        return restaurant.coordinate
    }
    
    init(restaurant: Restaurant) {
        self.restaurant = restaurant
        super.init()
    }
}

struct Restaurant {
    let name: String
    let coordinate: CLLocationCoordinate2D
}
超市也是如此

然后在创建注释时,将
餐厅
对象传递给它

let restaurant = Restaurant(name: "McDonald's", coordinate: CLLocationCoordinate2D(latitude: 27.2831, longitude: -127.831))
let restaurantAnnotation = RestaurantAnnotation(restaurant: restaurant)
mapView.addAnnotation(restaurantAnnotation)
您实现了当用户点击注释中的标注按钮时将收到通知的委托方法。在它中,您可以轻松地引用先前传递给它的对象

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if let annotation = view.annotation as? RestaurantAnnotation {
        print(annotation.restaurant)
    } else if let annotation = view.annotation as? SupermarketAnnotation {
        print(annotation.supermarket)
    }
}

之后你可以用这些数据做任何你想做的事情。在您的情况下,将其传递到新屏幕。

这不是Firestore问题,这是地图问题。@bsod甚至不确定这是地图问题;然后将数据传递到另一个屏幕在应用程序中传递数据是一个基本的编码过程。我们确实需要查看您尝试的代码,以及您希望通过什么过程“传递”数据。赛格?代表?一个孩子的例子?父/子设置?还有别的吗?请澄清问题,花点时间回顾一下,我可能不理解这个问题,因为它有点模糊,但我认为问题在于如何在视图控制器之间传递数据。问题在于,我希望传递存储在每个注释中的所有信息,并将其显示在另一个视图控制器上,而不必向特定的视图控制器添加注释。@Jay是的,我同意。似乎OP已经解决了显示注释部分,但不知道如何引用每个注释。我在答案的最后一段代码摘录中展示了如何做到这一点。只是添加了显示注释以提供更多上下文。