2016-07-27 8 views
0

Я получаю местоположение на моем HomeViewController, тогда я хочу передать это другому контроллеру NextViewController, но он ничего не возвращает.Переход к другому контроллеру просмотра

HomeViewController - Декларация

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 

Пожалуйста, дайте мне знать, если есть лучший способ, чтобы я мог получить доступ к Lat & Long во всех других ViewController в моем приложении.

+0

Откуда и как вы проезжаете мимо? Вы используете segue? если да, то где 'prepareForSegue'? – Lion

+0

Я обращаюсь к нему напрямую, поскольку объявляю Global Variable. –

+0

У вас должен быть объект и свойство 'NextViewController' в этом' NextViewController'. и вы можете установить это значение этим объектом! – Lion

ответ

0

Определить var passData: CLLocationManger? во всем мире в классе HomeViewController

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 
     } 

    } 

В NextViewController объявить это во всем мире в классе: -

var locationData:CLLocationManager? 

тогда доступ в NextViewController в

locationData.location.coordinate.latitude 

locationData.location.coordinate.longitude 

Примечание: - Вместо прохождения широты и долготы , передайте сам CLLocationManager, поскольку вы можете получить доступ ко всем свойствам CLLocationManager, т.е. Latitude, Longitude, Coord inate и т. д.

+0

Я вызываю segue внутри какой-либо другой функции с помощью функции performSegueWithIdentifier («segue_id», отправитель: self). другой способ передать данные через segue в этой другой функции? –

+0

yea определить выше метод, то есть переопределить fu nc prepareForSegue (segue: UIStoryboardSegue, отправитель: AnyObject?) в любом месте класса HomeViewController, но не внутри какой-либо функции. Рассмотрим prepareForSegue как отдельную функцию – MShah

+0

проверить сейчас, я определил performSegueWithIdentifier в методе делегата tableView. Выберите и используйте prepareForSegue как отдельный метод класса. – MShah

Смежные вопросы