【问题标题】:upload MapKit region to firebase将 MapKit 区域上传到 Firebase
【发布时间】:2019-02-11 18:49:48
【问题描述】:

我尝试将带有用户位置的地图保存到帖子中,但我得到 “MKMapView?”类型的值一直没有成员 'MKMapView' 作为错误... 以下显示了我的代码,但我省略了图像和标签的任何背景代码,因为那里一切正常,我只是将它们包含在此处,以便您知道我如何保存帖子信息...您知道我的错误是什么以及如何我能解决吗?

var takenMap: MKMapView!

@IBAction func postPressed(_ sender: Any) {
    if textView.text != "" && takenImage != nil && userLocation.text != "" {
        // Create and save a new job
        let newJob = Job(text: textView.text, jobImage: takenImage!, addedByUser: (userLabel?.text)!, userImage: UserImage, location: userLocation.text, map: takenMap.MKMapView)
        newJob.save()
}

//MARK:- CLLocationManager Delegates
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let lastLocation = locations.last {
        let geoCoder = CLGeocoder()

        let center = CLLocationCoordinate2D(latitude: lastLocation.coordinate.latitude, longitude: lastLocation.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
        map.setRegion(region, animated: true)
        self.map = takenMap

        geoCoder.reverseGeocodeLocation(lastLocation) { (placeMarks, error) in
            if error == nil {
                if let firstLocation = placeMarks?[0] {
                    self.locationManager.stopUpdatingLocation()

                    if let cityName = firstLocation.locality,
                        let street = firstLocation.thoroughfare {

                        self.scanLocation = "\(street), \(cityName)"
                        print("This is the current city name", cityName)
                        print("this is the current street address", street)
                        self.takenLocation = self.scanLocation!
                        self.userLocation.text = self.takenLocation
                    }
                }
            }
        }
    }
}

Job.swift:

var map: String?

init(map: String? = nil) {
    self.map = map
    ref = Database.database().reference().child("jobs").childByAutoId()
}

init(snapshot: DataSnapshot){
    ref = snapshot.ref
    if let value = snapshot.value as? [String : Any] {
        map = value["location"] as? String
    }
}

func save() {
    let newPostKey = ref.key

    // save jobImage
    if let imageData = jobImage?.jpegData(compressionQuality: 0.5) {
        let storage = Storage.storage().reference().child("jobImages/\(newPostKey)")

        storage.putData(imageData).observe(.success, handler: { (snapshot) in
            self.downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
            let postDictionary = [
                "map" : self.map!
                ] as [String : Any]
            self.ref.setValue(postDictionary)
        })
    }
}

我省略了标签或其他任何代码,因此 sn-p 不会太长

【问题讨论】:

    标签: ios swift firebase mapkit


    【解决方案1】:

    代码takenMap.MKMapView 应该只是takenMap

    【讨论】:

    • 试过了,但它说 无法转换类型 'MKMapView?' 的值到预期的参数类型“字符串?”
    • 为什么Job 期望String 用于名为map 的属性?也许也包括该代码。
    • 你能检查我编辑的问题吗?我已经为 job.swift 文件添加了代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多