2017-06-08 8 views
0

View Controllerで作成したフォームからFirebaseデータベースにデータを格納することに成功しましたが、マップ上に注釈として表示するデータを取得する必要があります。 2番目のビューコントローラですが、オンラインで何も検索せずに見つけた後、この作業をどうやってやるべきか分かりません。ここでFirebaseからのデータの取得とマップへの注釈としての保存

はFirebaseデータベースに正常に私のデータを保存し、私の作業コードです:

import UIKit 
import CoreLocation 
import Firebase 

class AddSightingViewController: UIViewController { 

    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var timeLabel: UILabel! 
    @IBOutlet weak var latitudeLabel: UILabel! 
    @IBOutlet weak var longitudeLabel: UILabel! 
    @IBOutlet weak var descriptionLabel: UITextView! 

    var locManager = CLLocationManager() 
    var currentLocation: CLLocation! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Set Date & Time 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateStyle = .medium 

     dateFormatter.setLocalizedDateFormatFromTemplate("EEEE, MMM d, yyyy") // // set template after setting locale 

     let dateString = "\(dateFormatter.string(from: Date() as Date))" 
     dateLabel.text = String(dateString) 

     let timeFormatter = DateFormatter() 
     timeFormatter.timeStyle = .medium 

     timeFormatter.setLocalizedDateFormatFromTemplate("hhmm") 

     let timeString = "\(timeFormatter.string(from: Date() as Date))" 

     timeLabel.text = String(timeString) 

     // Set Latitude & Longitude 

     locManager.requestWhenInUseAuthorization() 

     if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse || 
      CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways){ 
      currentLocation = locManager.location 
      self.latitudeLabel.text = String("\(currentLocation.coordinate.latitude)") 
      self.longitudeLabel.text = String("\(currentLocation.coordinate.longitude)") 
     } 
    } 

    func post() { 

     let date = dateLabel.text 
     let time = timeLabel.text 
     let latitude = latitudeLabel.text 
     let longitude = longitudeLabel.text 
     let sightingDescription = descriptionLabel.text 

     let post: [String : AnyObject] = ["Date" : date as AnyObject, 
              "Time" : time as AnyObject, 
              "Latitude" : latitude as AnyObject, 
              "Longitude" : longitude as AnyObject, 
              "Description" : sightingDescription as AnyObject] 

     var ref: DatabaseReference! 
     ref = Database.database().reference() 
     ref.child("Sightings").childByAutoId().setValue(post) 

    } 

    @IBAction func saveButton(_ sender: Any) { 

     post() 

     // Create the alert controller 
     let alertController = UIAlertController(title: "Sighting Logged Successfully", message: "Your logged entry will now show up on the map for others to see. Thank You!", preferredStyle: .alert) 

     // Create the actions 
     let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { 
      UIAlertAction in 
      NSLog("OK Pressed") 

     } 

     // Add the actions 
     alertController.addAction(okAction) 

     // Present the controller 
     self.present(alertController, animated: true, completion: nil) 

    } 

} 
+2

検索より...この質問は少なくとも2日ごとに表示されます。.. –

+0

@VladPulichev:あなたはこの質問は数日おきにポップアップしていることが正しいです。コーデラブがどこかにあるのであれば、開発者はこれを遠くに持って行き、それらを孤立させてしまうのではないかと本当に思います。しかし、それ以前の質問(答えられたもの)を見つけて、これを重複しているとマークすると、もっと役に立ちます。 –

+0

出力を注釈として検索しましたが、共有したいリンクはありません。 – Elfuthark

答えて

0

この上で働いた後、私は最終的には、以下の機能を使用してのviewDidLoad(でそれを呼び出すことによって動作するようになってきました)

func displayAnnotations() { 

     let ref = Database.database().reference() 
     ref.child("Sightings").observe(.childAdded, with: { (snapshot) in 

      let date = (snapshot.value as AnyObject!)!["Date"] as! String! 
      let time = (snapshot.value as AnyObject!)!["Time"] as! String! 
      let latitude = (snapshot.value as AnyObject!)!["Latitude"] as! String! 
      let longitude = (snapshot.value as AnyObject!)!["Longitude"] as! String! 
      let desc = (snapshot.value as AnyObject!)!["Description"] as! String! 

      let annotation = MKPointAnnotation() 

      annotation.coordinate = CLLocationCoordinate2D(latitude: (Double(latitude!))!, longitude: (Double(longitude!))!) 
      annotation.title = date 
      annotation.subtitle = time 
      self.map.addAnnotation(annotation) 

     })} 
関連する問題