swift - Как получить данные о моем местоположении и поместить их в переменные для iMessage?
Вчера я задал вопрос здесь, в стеке переполнения о том, как встроить мое текущее местоположение в тело сообщения
Я получил ответ и исправил свой код
Мой код прекрасно работает в консоли, но я не мог понять, как получить данные из функции 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)
}
}
1 ответ
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() имел параметры, которые вы включили в свое сообщение. Например 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 is my postalCode" в окне текстового сообщения.