簡體   English   中英

iPhone位置數據在首次啟動時不起作用

[英]iPhone Location Data doesn't work on very first start

我在iPhone上遇到位置問題。 它看起來很瘋狂,但似乎是可復制的。 在我的應用程序中,我使用Core Location獲取有關某些用戶操作的位置數據。 通常它似乎可以正常工作。 但是,在將應用程序部署到沒有先前版本的設備上之后(在XCode或通過iTunes無關緊要)上的第一次運行,它根本不起作用。 都沒有
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
也不
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
叫做。 我什至沒有得到手機信號塔的坐標。 GPS正常工作的唯一標志是彈出,要求允許訪問位置數據。 如果我退出了應用程序(退出是指真正殺死它而不是僅僅將其置於后台),那么在下次運行時,一切通常都可以正常工作。

一些更多的細節。 由於需要獲取用戶執行某些操作的位置,因此我使用以下方法:

  • 我使用相同的共享CLLocationManager對象(帶有kCLLocationAccuracyBest )和相同的共享委托對象。
  • 當用戶執行操作時,我會調用startUpdatingLocation並創建一個后台線程(基本上是計時器),但還有一些不相關的內容。 每15秒喚醒一次
  • 我累積了- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
  • 后台線程喚醒后,它將檢查修復程序和時間。 如果有足夠好的修復程序,它將停止等待。 如果超過了1分鍾的時間間隔,它也會停止等待。
  • “停止等待” =調用某些方法。 該方法在接收到的(如果有的話)中尋求最佳修復並進行處理。 它還調用stopUpdatingLocation

我看不到那種明顯的缺陷。 而且,相同的二進制文件通常在第二次啟動時開始工作。 有什么想法嗎? 我要瘋了嗎?

看來我自己找到了答案。 我的應用程序需要一些啟動准備。 不同之處在於,在第一次運行時,我會做一些一次性的大工作(通過網絡進行一些大的同步)。 這項漫長的任務是在后台線程中完成的。 然后,同一線程執行“公共初始化”,包括創建CLLocationManager對象。 當然,然后,后台線程很快就死掉了,而沒有任何RunLoop就離開了CLLocationManager。 在第二次啟動時,不需要進行大的同步,並且在UI線程上執行“通用初始化”。 因此,CLLocationManager在主RunLoop上運行,並愉快地提供了修復程序。

綜上所述:創建CLLocationManager對象時,在正確的線程(或NSRunLoop / CFRunLoop)上進行操作至關重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM