2016-07-27 14 views
0

Ich bekomme Position auf meinem HomeViewController, dann möchte ich das an andere NextViewController weitergeben, aber es gibt immer nichts zurück.Übergabe der Position an andere View-Controller

HomeViewController - Erklärung

struct MyVariables { 

static var fetchedLat = String() 
static var fetchedLong = String() 
} 

class HomeViewController: UIViewController,UITableViewDataSource,UITableViewDelegate, CLLocationManagerDelegate, NSFetchedResultsControllerDelegate { 

var location: CLLocation!{ 
    didSet{ 
     lat = "\(location.coordinate.latitude)" 
     long = "\(location.coordinate.longitude)" 
    } 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
{ 
    let locValue:CLLocationCoordinate2D = manager.location!.coordinate 
    MyVariables.fetchedLat = String("\(locValue.latitude)") 
    MyVariables.fetchedLong = String("\(locValue.longitude)") 
    print("locations = \(locValue.latitude) \(locValue.longitude)") 
    location = (locations).last 
    locationManager.stopUpdatingLocation() 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    self.locationManager.requestAlwaysAuthorization() 

    self.locationManager.requestWhenInUseAuthorization() 

    if CLLocationManager.locationServicesEnabled() 
    { 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
     locationManager.startUpdatingLocation() 
    } 
} 

NextViewController - ViewDidLoad

MyVariables.fetchedLat = outputLat 
    MyVariables.fetchedLong = outputLong 

Bitte lassen Sie mich wissen, ob es eine bessere Art und Weise ist, so dass ich Lat & Lange in allen anderen Viewcontroller in meiner App zugreifen können.

+0

Von wo und wie Sie passierenden Ort? Benutzt du einen Übergang? Wenn ja, wo ist 'prepareForSegue'? – Lion

+0

Ich greife direkt darauf zu, wie ich die globale Variable deklariert habe. –

+0

Sie sollten 'NextViewController'-Objekt und Eigenschaft in diesem' NextViewController' haben. und Sie können diesen Wert für dieses Objekt festlegen !! – Lion

Antwort

0

Definieren var passedData: CLLocationManger? global in HomeViewController Klasse

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     //let cell = tableView.cellForRowAtIndexPath(indexPath) 
     index = indexPath.row 

     performSegueWithIdentifier("yourSegue", sender: self) 

    } 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)  
{ 
     if segue.identifier == "yourSegue" 
     { 
     let destVC = segue.destinationViewController as! NextViewController 
     destVC.locationData = passedData // both are of Type CLLocationManager 
     } 

    } 

In NextViewController diese global in der Klasse deklarieren: -

var locationData:CLLocationManager? 

dann Zugang in NextViewController als

locationData.location.coordinate.latitude 

locationData.location.coordinate.longitude 

Hinweis: - Anstelle des Führens Breiten- und Längen Übergeben Sie den CLLocationManager selbst, da Sie auf alle Eigenschaften von CLLocationManager zugreifen können, z. B. Latitude, Longitude, Coord inate usw.

+0

Ich rufe segue innerhalb einer anderen Funktion mit performSegueWithIdentifier ("segue_id", sender: self). Gibt es irgendwelche andere Möglichkeit, Daten über den Kanal in dieser anderen Funktion zu übergeben? –

+0

yea definiere obige Methode, dh überschreibe fu nc prepareForSegue (segue: UIStoryboardSegue, Absender: AnyObject?) irgendwo innerhalb der HomeViewController-Klasse, aber nicht innerhalb einer Funktion. Berücksichtigen Sie prepareForSegue als separate Funktion – MShah

+0

Jetzt überprüfen, ich habe performSegueWithIdentifier in der delegierten Methode didSelect definiert und prepareForSegue als separate Klassenmethode verwendet. – MShah

Verwandte Themen