当前位置: 首页 > 面试题库 >

Swift中的CLLocation Manager获取用户位置

荀嘉熙
2023-03-14
问题内容

我正在尝试将ObjC中的旧应用程序转换为Swift作为练习,并且遇到了一些问题。我在旧应用程序中使用它的方式是建立CLLocation
Manager,然后使用:

manager = [[CLLocationManager alloc]init];
manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyBest;    
[manager startUpdatingLocation]

它会自动调用:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
}

从那里我可以提取我需要的所有信息。但是,此方法没有自动完成功能,因此我无法弄清楚如何重现它。该文件说

startUpdatingLocation()

仍将由代理调用,但没有发生。

这是我到目前为止的内容:

import UIKit
import corelocation

class ViewController: UIViewController,CLLocationManagerDelegate{

@IBOutlet var gpsResult : UILabel

var manager:CLLocationManager!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    manager = CLLocationManager()
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.startUpdatingLocation()
}

func locationManager(manager:CLLocationManager, didUpdateLocations locations:AnyObject[]) {
    println("locations = \(locations)")
    gpsResult.text = "success"
}
}

任何帮助或指针在哪里都将不胜感激。谢谢。

编辑:从建议更新,但仍然无法正常工作

EDIT2:似乎是一些错误,导致该方法无法在ViewController中正常工作


问题答案:

您缺少两件事。首先,您必须使用requestAlwaysAuthorization或寻求许可requestWhenInUseAuthorization()。所以你viewDidLoad()应该是这样的:

var locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
}

其次,Info.plist 按照此处的指示编辑您的。



 类似资料:
  • 问题内容: 我想使用Swift获取位置的当前经度和纬度,并通过标签显示它们。我尝试执行此操作,但标签上没有任何显示。 问题答案: 恕我直言,当您寻找的解决方案非常简单时,您就使代码复杂化了。 我已经通过使用以下代码来做到这一点: 首先创建和请求授权的实例 然后检查用户是否允许授权。 用它来做到这一点 您将它们设置为的想法是正确的,但是我能想到的唯一原因是用户未给予您许可,这就是为什么您当前的位置数

  • 我有一个IOS 8-only应用程序,我想在其中使用位置服务获取设备的纬度和经度。我认为我已经正确地实现了所有功能,但应用程序从未询问用户是否可以使用位置服务,CLAuthorizationStatus从未从kCLAuthorizationStatusNotDetermined和CLLocationManager委托方法更改 从未接到过电话。 下面是在视图控制器的接口文件中定义的CLLocatio

  • 问题内容: 首先,我很清楚Xcode 6和Swift语言是Beta版本,容易出错。但是,这一特定功能似乎有些奇怪,因为到目前为止我尝试过的所有其他功能似乎都可以正常工作。 如果这不适合StackOverflow,我将很乐意删除该问题。 我已经开始使用Xcode 6 / Swift(为发布做准备),与我想的相比,这是一种非常愉快的体验。话虽如此,在移植我喜欢做的“训练”风格的应用程序时,一个问题是由

  • 问题内容: 我一直在尝试以及如何使用它的光标位置。 但是由于我正在使用Swift,所以我想学习如何获取当前光标位置以及如何在Swift中进行设置。 下面的答案是我从Objective-C进行实验和翻译的结果。 问题答案: 以下内容适用于和。 文本字段文本的最开始: 文本字段文本的末尾: 当前选择的范围: 获取光标位置 设定光标位置 为了设置位置,所有这些方法实际上都是使用相同的开始值和结束值来设置

  • 目前,正在开发一个应用程序,该应用程序需要从CLLocationManager获取最后一个位置(无任何常规跟踪)。不管它有多老,它都是准确的。我不需要也不想开始跟踪——我只需要从缓存中抓取最后一个位置,就这样。在iOS中,CLLocationManager是一个共享组件,如果某个应用程序使用位置跟踪,那么另一个应用程序应该能够使用CLLocationManager中的最新位置。地方只需alloc/

  • 我意识到这个问题以前被问过很多次,但我现在问这个问题是因为答案很旧(与新的API相比)。 我以前使用过Location Manager,但我发现它非常不可靠。例如,在我的应用程序中,使用getLastKnownLocation和/或current location,它会立即将相机加载到用户的当前位置。但是,如果我在启动应用程序之前打开设备上的位置,它就不会把摄像头放在用户的当前位置,而是放在Nig