Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift终止应用程序在位置服务中获取数据?_Swift_Swift3 - Fatal编程技术网

Swift终止应用程序在位置服务中获取数据?

Swift终止应用程序在位置服务中获取数据?,swift,swift3,Swift,Swift3,我想在应用程序被终止时获取数据。但我认为,若应用程序被杀死,我就无法获取数据 应用程序终止时位置更新服务正在运行。我可以在位置服务中获取数据并更新本地数据库吗 或者,当应用程序被终止时,有什么方法可以获取数据?我只是想请求一些API,从中获取数据并插入本地数据库。遗憾的是,没有。由于您的应用程序已关闭,您无法获取任何数据或执行任何其他操作。当应用程序打开时,你可以用一些数学来做所有的事情 是的,你可以。您可以设置后台任务,但时间有限 这取决于设备电池 确保在功能中打开位置更新 您可以检查后台任务

我想在应用程序被终止时获取数据。但我认为,若应用程序被杀死,我就无法获取数据

应用程序终止时位置更新服务正在运行。我可以在位置服务中获取数据并更新本地数据库吗


或者,当应用程序被终止时,有什么方法可以获取数据?我只是想请求一些API,从中获取数据并插入本地数据库。

遗憾的是,没有。由于您的应用程序已关闭,您无法获取任何数据或执行任何其他操作。当应用程序打开时,你可以用一些数学来做所有的事情

是的,你可以。您可以设置
后台任务
,但时间有限

这取决于设备电池

确保在功能中打开位置更新

您可以检查后台任务

示例代码:

final class LocationManager: NSObject {
    static let shared = LocationManager()

    private var backgroundTask = UIBackgroundTaskIdentifier.invalid
    private let manager = CLLocationManager()

    func startMonitoring() {
        manager.delegate = self
        manager.allowsBackgroundLocationUpdates = true
        manager.pausesLocationUpdatesAutomatically = false
        manager.startMonitoringSignificantLocationChanges()
        manager.requestAlwaysAuthorization()
    }

}

extension LocationManager: CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
        print("LocationManager didStartMonitoringFor")
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("LocationManager \(error)")
    }

    func locationManager(_ manager: CLLocationManager, monitoringDidFailFor region: CLRegion?, withError error: Error) {
        print("LocationManager \(error)")
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        postLocation(location: locations.first)
    }
}

extension LocationManager {

    private func postLocation(location: CLLocation?) {
        guard let location = location else { return }

        if UIApplication.shared.applicationState == .background {

            backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "locationTaskName", expirationHandler: {
                UIApplication.shared.endBackgroundTask(self.backgroundTask)
                self.backgroundTask = UIBackgroundTaskIdentifier.invalid
            })

            DispatchQueue.global(qos: .background).async {
                self.postRequest(location: location) { [weak self] in
                    guard let self = self else { return }
                    UIApplication.shared.endBackgroundTask(self.backgroundTask)
                    self.backgroundTask = UIBackgroundTaskIdentifier.invalid
                }
            }
        } else {
            postRequest(location: location)
        }

    }

    private func postRequest(location: CLLocation, completion: (() -> Void)? = nil) {
        // TODO Request
        //service.sendLocation
    }

例如:你们有一个叫做“钱”的变量,你们第二个变量的收入是3美元。总秒*收入(3)=挣到的钱那么当他们杀人时,应用程序是如何工作的呢?商店里有很多应用程序,它们可以在刷新数据后发送通知。我认为,当应用程序被终止时,唯一能起作用的是通知。当应用程序被终止时,您可以运行长时间运行的任务几分钟。但无法运行永久服务。如果你能说出你的确切要求。然后我们可能会为您找到一个解决方案:)我正在创建新闻应用程序,并从api获取数据。我的新闻数据库应该是最新的,我不想浪费时间加载应用程序打开时的数据。我想在应用程序终止后每30分钟更新一次数据库。对于您的场景,最可行的解决方案是使用后台应用程序刷新。读这篇文章,你会有更好的理解。