Swift iOS:收到远程通知时,Closure不会在后台运行

时间:2015-01-18 15:25:46

标签: ios swift asynchronous gps closures

我正在编写一个iOS应用程序,要求在收到推送通知时更新设备的GPS位置。

我使用一个闭包来获取当前的GPS位置。当应用程序位于前台时,此代码运行完美(“新远程通知”和“获取位置”都打印到控制台),但当应用程序在后台时,只有“新远程通知”(并且没有位置错误)打印到控制台。因此,此时我没有设备的GPS位置,这对我的应用程序的功能非常重要。

非常感谢任何帮助。 感谢。

我在Info.plist文件中有“必需的背景模式”;

 App registers for location updates
 App downloads content from the network
 App downloads content in response to push notifications

我的应用程序也可以随时访问位置,包括后台(在代码中的其他位置成功测试):NSLocationAlwaysUsageDescription位于Info.plist文件中

在我的AppDelegate文件中:

    func application(application: UIApplication!, didReceiveRemoteNotification userInfo:NSDictionary!) {

    println("New remote notification")
    var notification:NSDictionary = userInfo as NSDictionary

    var loc: LocationManager?
    loc = LocationManager()


    loc!.fetchWithCompletion {location, error in

        // fetch location or an error
        if let myloc = location {

            var lat = myloc.coordinate.latitude as Double
            var lon = myloc.coordinate.longitude as Double

            println("Got location")

        } else if let err = error {

            println(err.localizedDescription)

        }
        loc = nil
    }

}

1 个答案:

答案 0 :(得分:1)

如果应用不在前台,请务必请求一点时间使用beginBackgroundTaskWithExpirationHandler完成请求,然后在完成后致电endBackgroundTask

有关更多信息,请参阅适用于iOS的应用程序编程指南的Background Execution章节中的执行有限长度任务