2015-11-04 2 views
0

Вчера я задал вопрос здесь, в stack Overflow о том, как встроить мое текущее местоположение в теле сообщенияswift - Как получить данные о местоположении и поместить их в переменные для iMessage?

я получил ответ, и я исправил мой код

Мой код работает просто отлично в консоли, но я не мог» t выяснить, как получить данные из функции displayLocationInfo и сохранить их в переменных; затем поместите переменные в тело сообщения.

Я Сорта нового в развитии iPhone

Любая помощь?

class Location: NSObject,CLLocationManagerDelegate { 


    var locationManager = CLLocationManager() 
    var currentLocation : CLPlacemark? 
    var detectLocation : CLLocationManager? 
    var locManager = CLLocationManager() 


    func viewDidLoad() 
    { 
     viewDidLoad() 

     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.startUpdatingLocation() 

    } 


    func updateLocation() 
    { 
      locationManager.startUpdatingLocation() 
    } 



    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     locationManager.stopUpdatingLocation() 


     CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)->Void in 

      if (error != nil) 
      { 
       print("Error: " + error!.localizedDescription) 
       return 
      } 

      if placemarks!.count > 0 
      { 
       let pm = placemarks![0] 
       self.displayLocationInfo(pm) 
      } 
      else 
      { 
       print("Error with the data.") 
      } 
     }) 
    } 

    func displayLocationInfo(placemark: CLPlacemark) 
    { 

     self.locationManager.stopUpdatingLocation() 
     print(placemark.locality) 
     print(placemark.postalCode) 
     print(placemark.administrativeArea) 
     print(placemark.country) 
    } 

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
    { 
     print("Error: " + error.localizedDescription) 
    } 

} 
+0

Когда вы говорите тело сообщения, вы имеете в виду текстовое сообщение или электронное письмо или что-то еще? – Charlie

+0

Да, я имею в виду текст сообщения, после создания сообщения он должен включать данные о местоположении –

ответ

0
import MessageUI 

сделать ваш класс правильный делегат (это один для IMessage):

MFMessageComposeViewControllerDelegate 

сделать некоторые глобальные переменные для хранения полей, которые вы хотите сохранить (установить их при печати на консоль в вашем текущем коде):

class Location: NSObject,CLLocationManagerDelegate, MFMessageComposeViewControllerDelegate { 


var locationManager = CLLocationManager() 
var currentLocation : CLPlacemark? 
var detectLocation : CLLocationManager? 
var locManager = CLLocationManager() 

//put your variables for your message below: 
//you should use optionals (?) here but to keep it simple I'm assigning "" 
var locality = "" 
var postalCode = "" 

//set your variables when you are currently printing them in the console: 
func displayLocationInfo(placemark: CLPlacemark) 
{ 

    self.locationManager.stopUpdatingLocation() 
    print(placemark.locality) 
    print(placemark.postalCode) 
    print(placemark.administrativeArea) 
    print(placemark.country) 

    //here I set postalcode to be used in the message later 
    postalCode = placemark.postalCode 

} 
//call this function when the user hits a send button 
func messageAction() {   
    if MFMessageComposeViewController.canSendText() { 
     let messageVC = MFMessageComposeViewController() 
     messageVC.messageComposeDelegate = self  
     messageVC.body = "\(postalCode) is my postalCode" 
     self.presentViewController(messageVC, animated: true, completion: nil) 
    } 
    else { 
     print("User hasn't setup Messages.app") 
    } 
} 

//if you have any code you want to run when the message is done sending put it in 
func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) { 

self.dismissViewControllerAnimated(true, completion: nil) 

    switch (result.rawValue) { 
    case MessageComposeResultSent.rawValue: 
     print("Message sent success") 
    default: 
     return 
    } 


} 

Другим вариантом было бы сделать messageAction() m Этид имеет параметры, которые вы указываете в своем сообщении. Как messageAction (postalCode: String ?, locality: String ?, municipality: String?) И т. Д. Это действительно зависит от того, хотите ли вы использовать эти значения другими способами по всему миру или нет.

В ответ на вопросы Автор:

Установить глобальную переменную (смотрите в большой выборке кода выше для этой линии). Он делает postalCode глобальной переменной.

var postalCode = "" 

В displayLocationInfo() установить эту переменную, чтобы иметь значение данного адреса:

postalCode = placemark.postalCode 

В messageAction() установить тело сообщения, чтобы использовать эту переменную:

let messageVC = MFMessageComposeViewController() 
messageVC.body = "\(postalCode) is my postalCode" 

Это выдает сообщение, в котором «12345 - это мой почтовый код» в окне текстовых сообщений.

+0

Я точно знаю, как реализовать код сообщения, но я хочу вставить свои данные о местоположении в тело сообщения Я не смог получить данные о местоположении из displayLocationInfo function –

+0

Правильно ли работает консольная печать? Как правильно распечатать информацию? Если это так, то вы просто храните информацию в переменных, как показано выше, и вызывайте их в функции сообщения. – Charlie

+0

Да, он отлично работает на консоли –

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