无法弄清楚如何使用 CLPlacemark 将我当前的位置正确嵌入到消息正文中
Posted
技术标签:
【中文标题】无法弄清楚如何使用 CLPlacemark 将我当前的位置正确嵌入到消息正文中【英文标题】:can't figure out how to embed my current location in message body correctly using CLPlacemark 【发布时间】:2015-11-03 14:53:36 【问题描述】:几天前我几乎没有尝试将我当前的位置嵌入到我 iPhone 上的消息正文中,但我失败了。
我尝试了所有我的想法,但我只得到错误
我得到的最后一个错误是
"致命错误:在展开 Optional 时意外发现 nil 价值”
我创建了一个 CLPlacemark
的对象并将其设为可选,这意味着它可以有值或可以有 nil。
有什么方法可以用我当前的位置创建消息吗?
主菜单文件
import UIKit
import Social
import MessageUI
import Foundation
import CoreLocation
class MainMenu: UIViewController , MFMessageComposeViewControllerDelegate , UINavigationControllerDelegate , MFMailComposeViewControllerDelegate, CLLocationManagerDelegate
let locationManager = CLLocationManager()
func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult)
let placeMarks = Location()
@IBAction func TapOnEmergency(sender: UIButton)
let textMessageRecipients = ["+123456789"]
let messageComposer = MFMessageComposeViewController()
let Emergency = UIAlertController(title: "Do You Need Help ?", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let Yes = UIAlertAction(title: "YES", style: .Default) (action) in
if (MFMessageComposeViewController.canSendText())
messageComposer.messageComposeDelegate = self
messageComposer.recipients = textMessageRecipients
messageComposer.body = "I'm Lost, I need some Help, Here's my Location \(self.placeMarks.currentLocation!.country)"
self.navigationController?.presentViewController(messageComposer, animated: true)
self.presentViewController(messageComposer, animated: true, completion: nil)
self.messageComposeViewController(messageComposer, didFinishWithResult: MessageComposeResultCancelled)
else
let errorAlert = UIAlertController(title: "Cannot Send Text Message", message: "Your device is not able to send text messages.", preferredStyle: UIAlertControllerStyle.Alert)
errorAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil))
self.presentViewController(errorAlert, animated: true, completion: nil)
let Options = UIAlertController(title: "Do You Want to Call Your Supervisor ?", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let dialNumber = UIAlertAction(title: "YES", style: .Default) (action) in
let call:NSURL = NSURL(string: "tel://123456789")!
UIApplication.sharedApplication().openURL(call)
Options.addAction(dialNumber)
let Dismiss = UIAlertAction(title: "Dismiss", style: .Destructive) (action) in
Options.addAction(Dismiss)
self.presentViewController(Options, animated: true)
Emergency.addAction(Yes)
let No = UIAlertAction(title: "Dismiss", style: .Destructive) (action) in
Emergency.addAction(No)
self.presentViewController(Emergency, animated: true)
位置文件
import UIKit
import CoreLocation
class Location: UIViewController, CLLocationManagerDelegate
let locationManager = CLLocationManager()
var currentLocation : CLPlacemark?
【问题讨论】:
【参考方案1】:仅创建 CLPlacemark 不会为您获取位置。您必须创建 CLLocationManager 对象,然后使用 CLLocationManager 对象的 startUpdatingLocation 方法更新您的当前位置。此外,您还必须实现以这种方式接收当前位置的委托方法。
import UIKit
import CoreLocation
class Location: UIViewController, CLLocationManagerDelegate
let locationManager = CLLocationManager()
var currentLocation : CLPlacemark?
var locationManager = CLLocationManager()
private override init()
super.init()
locationManager.delegate = self
func updateLocation()
locationManager.startUpdatingLocation()
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
locationManager.stopUpdatingLocation()
let location : CLLocation = locations.last as CLLocation!
//use reverse geocoding to get the address from location coordinates you got
获得位置坐标后,您可以进行反向地理编码以获取地标或确切地址。有关反向地理编码,请参阅 Reverse Geocode Location in Swift。关于您遇到的错误,您可以在创建消息之前检查地标对象是否为 nil。
【讨论】:
以上是关于无法弄清楚如何使用 CLPlacemark 将我当前的位置正确嵌入到消息正文中的主要内容,如果未能解决你的问题,请参考以下文章
无法弄清楚如何正确使用 KeyboardAvoidingView
无法弄清楚如何在 WebService 中使用参数 MaxReceivedMessageSize