我尝试使用名为print(re.findall(r'[^\b]+', "bbb \\bash\baaa"))
的单例位置管理器来监控用户的重要位置更改,它是这样的:
LocationService.Swift :
LocationService
myVC.swift :
class var sharedInstance: LocationService {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: LocationService? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = LocationService()
}
return Static.instance!
}
var locationManager: CLLocationManager?
var location: CLLocation?
var delegate: LocationServiceDelegate?
override init() {
super.init()
self.locationManager = CLLocationManager()
guard let locationManager = self.locationManager else {
return
}
if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager.requestAlwaysAuthorization()
}
locationManager.delegate = self
locationManager.distanceFilter = 10
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.pausesLocationUpdatesAutomatically = false
if NSString(string: UIDevice.currentDevice().systemName).floatValue >= 9 {
locationManager.allowsBackgroundLocationUpdates = true
}
}
func startUpdatingLocation() {
print("Starting Location Updates")
self.locationManager?.startUpdatingLocation()
}
func startMonitoringSignificantLocationChanges() {
print("Starting Significant Location Updates")
self.locationManager?.startMonitoringSignificantLocationChanges()
}
// CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
// singleton for get last location
self.location = location
}
但private let locationService = LocationService.sharedInstance
func prepareInformation() {
self.locationService.delegate = self
self.locationService.startMonitoringSignificantLocationChanges()
}
只在应用程序启动时被调用一次,然后它甚至不会被调用。但当我切换线路时:
didUpdateLocations
为:
self.locationService.startMonitoringSignificantLocationChanges()
效果很好,每次用户移动时都会调用。
可能是什么问题?谢谢!
答案 0 :(得分:1)
根据Apple文档
返回当前位置修复后,接收器会生成更新 仅当用户位置发生重大变化时才会发生事件 检测。 它不依赖于distanceFilter属性中的值 生成事件。
并且
只要设备移动500米,应用就会收到通知 或者更多来自之前的通知。不应该期待 通知频率高于每五分钟一次。如果 设备能够从网络中检索位置管理器的数据 更有可能及时发送通知
我认为当用户将其位置更改10米时,您预计会发生一个事件,但此方法并不依赖于distanceFilter。无论何时使用startUpdatingLocation(),您都将获得依赖于distanceFilter属性的事件。
您可以阅读有关此here的更多信息。