- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几天前我几乎没有尝试在我的 iPhone 上的消息正文中嵌入我的当前位置,但我失败了。
我想尽了所有办法,但我只得到了错误
我得到的最后一个错误是
"fatal error: unexpectedly found nil while unwrapping an Optional value"
我创建了一个 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?
}
最佳答案
只是创建 CLPlacemark 不会为您获取位置。您将必须创建 CLLocationManager 对象,然后使用 CLLocationManager 对象的 startUpdatingLocation 方法更新您的当前位置。此外,您还必须实现委托(delegate)方法以通过这种方式接收当前位置。
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。
关于ios - 无法弄清楚如何使用 CLPlacemark 将我的当前位置正确地嵌入到消息正文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502130/
这是我在 StackOverflow 上找到的部分代码。 它在 Swift 1.2 中工作为什么此代码在 swift 2 中不再有效: geoCoder.reverseGeocodeLocation(
我有一个标签显示属于确切地理位置的街道名称。我正在从 placemarkStreet 变量中检索街道名称,它工作正常,但有时当我登录 placemark.thoroughfare 时,它是一个 (nu
我想显示用户位置的完整街道名称,使用以下代码我只能显示城市名称: -(void) reverseGeocode:(CLLocation *)location{ CLGeocoder *geoco
我想知道是否可以从 CLPlacemark 获取州的缩写? 在 Apple 的 CLPlacemark Reference 中它指出: 行政区域与地标关联的州或省。 (只读)@property(non
我正在尝试了解 CLPlacemark 以及何时/如何为添加到 map 的图钉标注创建信息。在我几年前在更多 iOS 3 开发中读到的内容之前,他们对地址进行了反向地理编码并构建了地址(街道、邮政编码
我找遍了所有地方,但没有找到这个问题的答案。 我正在构建一个使用用户位置(经纬度)的 iOS 应用程序创建一个 CLPlacemark,并将街道+国家/地区发送到服务器并根据此位置返回响应。 现在服务
几天前我几乎没有尝试在我的 iPhone 上的消息正文中嵌入我的当前位置,但我失败了。 我想尽了所有办法,但我只得到了错误 我得到的最后一个错误是 "fatal error: unexpectedly
我有一个尝试更新我的授权状态的方法。 使用 PromiseKit 6、Swift 4.2,我似乎无法让我的 Promise 成为一个 CLPlacemark。 这会导致一连串的错误 Value of
是否可以检查 CLPlacemark's 是否存在?名称是街道地址? 如果是购物中心、主题公园、学校或其他有趣的东西,我想显示名称,但如果是街道地址,则不显示。 我正在考虑使用这样的正则表达式来检查名
如何在 Swift 中将 MKMapItem 转换为 CLPlacemark? 我的代码给我一个编译器错误 'MKMapItem' is not convertible to 'CLPlacemark
谁能建议清洁工从 CLPlacemark 创建地址字符串。 目前我正在使用这个扩展 extension CLPlacemark { func makeAddressString() -> St
我有一个移动 CLPlacemark 对象并使用它们的应用程序,我想对与它们交互的几个组件进行单元测试。为此,我希望能够使用生成具有已知值的模拟 CLPlacemark 的方法来阻止 MapKit 对
我正在使用 MKLocalSearch 搜索某些地方,例如城市或城市中的街道,以在 MKMapView 上显示它们 我这样显示地标 let loc = placemark.location! //CL
我正在尝试检测地标值是否包含某些值。为此,我在 NSString 上使用了 rangeOfString 方法。但是,rangeOfString 可以像我期望的那样处理字符串,但不能像我期望的那样处理地
Reading the documentation ,苹果指向ABPerson在 CLPlacemark 的 addressDictionary 上使用的键。 但自 iOS 9 以来,ABPerson
当注销或发送(使用 RestKit 的 Web 服务)时,特别是 CLPlacemark 的 subThoroughfare 属性出现奇怪的字符,我希望连字符出现。 记录: NSLog(@"%@",
我必须从 CLPlaceMark 中取出 map_region 和类型,但在 CLPlaceMark 类中找不到可以提供 map_region 值的属性。 { placeData =
我正在尝试提取在 CLPlacemark 对象中返回的 dependentLocality 信息。数据(匿名)看起来像 { "cache_control" = CACHEABL
我使用 CLGeocoder 将 CLLocation 从经度/纬度解码为地名。它工作正常。但是还有一件事困扰着我。当我将设备语言设置为英语时,以下代码的结果: - (void)locationMan
我正在使用 CLGeocoder 进行反向地理定位并获取 CLPlacemark 数组。当我在美国境外使用 GPS(即 -27,127)然后访问 placemark.postalCode 时,应用程序
我是一名优秀的程序员,十分优秀!