2016-11-11 96 views
0

我正在使用MKMapView開發應用程序。我想每3分鐘更新一次位置到服務器。現在,我可以使用NSTimer更新位置,但我無法在應用處於後臺時進行更新。我已經搜索了其他堆棧溢出的答案,但他們沒有幫助。如何使用swift在後臺應用中更新位置2

我曾嘗試:

  • 我在後臺模式切換選擇位置更新
  • 我列入此代碼,以我的看法沒有加載方法:

    self.locationManager.allowsBackgroundLocationUpdates = true 
    

什麼我可以接下來做什麼?有人可以幫我做這個嗎?

+0

在plist中UIBackgroundModes添加此鍵=位置,請點擊此鏈接http://stackoverflow.com/questions/33385652/ios-背景模式位置更新管理器不更新背景模式 –

+0

我已經添加NSlocationAlwaysUsageDescription和NSLocationAlwaysUseinUsageDescription到plist ...這是足以與背景工作???? @ shrikant Tanwade – antonyraja

+0

我寫了視圖控制器中的所有函數如何調用該函數以appdelegat e .... @ ShrikantTanwade – antonyraja

回答

0

定時器與運行循環一起工作。要有效地使用計時器,您應該瞭解運行循環的運行方式 - 請參閱RunLoop和Threading Programming Guide。特別要注意的是,運行循環保持對定時器的強引用,因此在將定時器添加到運行循環後,您不必維護自己對定時器的強引用。

計時器不是實時機制;只有在添加了定時器的運行循環模式之一運行並且能夠檢查定時器的觸發時間是否已過時,它纔會觸發。由於典型的運行循環管理各種輸入源,所以定時器的時間間隔的有效分辨率被限制在50-100毫秒的量級上。如果在長時間標註期間發生定時器的觸發時間,或者運行循環處於未監視定時器的模式下,定時器將在下次運行循環檢查定時器時才觸發。因此,計時器觸發的實際時間可能是計劃的點火時間之後的相當長的一段時間。 From Apple official document.

當我們的應用程序在後臺時調用此方法。操作系統限制我們(我相信)30秒。三十秒後,我們的時間到了。 我們必須調用completionHandler()(或者操作系統會認爲我們已經用完了所有的時間)。

嘗試內

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum) 
    return true 
} 

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    // do background work 
} 

源執行你的任務: - Background task.

相關問題