将Firebase中的数据推送到类对象Swift

时间:2017-04-16 14:32:04

标签: swift class object firebase firebase-realtime-database

我一直在构建我的第一个firebase应用程序,并且我遇到了试图检索数据并将其作为注释显示在地图上的问题。 目前我的逻辑如下:获取数据并将其放入 Note Class i然后尝试将信息推送到位于 NoteBrain 的数组中,信息似乎正在当我用print语句调试时,数据显示在类中。唯一的问题是我无法将数据推送到视图控制器。由于某种原因,我的loadallcoordinates不工作,我甚至尝试键入打印语句,它没有出现。

我的问题

这是构建数据的最佳方式吗?有什么方法可以使我当前的实现工作吗?

三江源

注意课程

import Foundation
import MapKit

    class noteClass : NSObject, MKAnnotation{
        var title : String?
        var subtitle: String?
        var coordinate: CLLocationCoordinate2D
        var longitude : Double
        var latitude : Double


        init(dictionary: [String: Any]) {
            self.title = dictionary["title"] as? String ?? ""
            self.subtitle  = dictionary["subtitle"] as? String ?? ""
            self.longitude = dictionary["longitude"] as! Double
            self.latitude = dictionary["latitude"] as! Double 
            self.coordinate = CLLocationCoordinate2DMake((dictionary["longitude"] as? Double)!, (dictionary["latitude"] as? Double)!)
        }

    }

noteBrain或模型类

import Foundation
import UIKit
import MapKit
import CoreLocation
import Firebase
import FirebaseDatabase

class noteBrain: UIViewController, CLLocationManagerDelegate{
    var noteArray = [noteClass]()
    var newNote = false
    var outsideToggle = true
    let span:MKCoordinateSpan = MKCoordinateSpanMake(0.0025, 0.0025)


    var manager = CLLocationManager()


    func getNotes() -> Array <noteClass>
    {
        return noteArray
    }

    func appendArray(newNote : noteClass){
        noteArray.append(newNote)
    }

    func checkInside( s1 : Int ) -> noteClass{
        return noteArray[0]
    }

    func checkToggle() -> Bool{
    return outsideToggle
    }

    func fetchUser() {
        FIRDatabase.database().reference().child("notes").observe(.childAdded, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject] {
                let user = noteClass(dictionary: dictionary)
                self.appendArray(newNote: user)
            }
        }, withCancel: nil)


    }

}

的viewController

import UIKit
import MapKit
import CoreLocation
import Firebase
import FirebaseDatabase

struct PreferencesKeys{
    static let savedItems = "savedItems"
}




class ViewController: UIViewController, CLLocationManagerDelegate{

    let manager = CLLocationManager()
    var coordinotes : [noteClass] = []
    var latitude = Double()
    var noteTime = noteBrain()

    //Map
    @IBOutlet weak var map: MKMapView!


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let location = locations[0]
        let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
        let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, noteTime.span)
        map.setRegion(region, animated: true)
        self.map.showsUserLocation = true
    }


    override func viewDidLoad()
    {
        super.viewDidLoad()
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(handleLogout))

        if FIRAuth.auth()?.currentUser?.uid == nil {
            perform(#selector(handleLogout), with: nil, afterDelay: 0)
        }
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()
        noteTime.fetchUser()
        appendThisTest()
        loadAllCoordinotes()
    }

    func handleLogout() {

        do {
            try FIRAuth.auth()?.signOut()
        } catch let logoutError {
            print(logoutError)
        }

        let loginController = LoginController()
        present(loginController, animated: true, completion: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    func loadAllCoordinotes() {
        for x in coordinotes
        {
            add(coordinote: x)
        }
    }


    func add(coordinote: noteClass) {
        map.addAnnotation(coordinote)
        print(coordinote.coordinate)
        print("test")
        print(coordinote.title! as String)
    }

    func appendThisTest(){
        coordinotes = noteTime.getNotes()
    }  

}

0 个答案:

没有答案