[英]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
stopUpdatingLocation
我看不到那種明顯的缺陷。 而且,相同的二進制文件通常在第二次啟動時開始工作。 有什么想法嗎? 我要瘋了嗎?
看來我自己找到了答案。 我的應用程序需要一些啟動准備。 不同之處在於,在第一次運行時,我會做一些一次性的大工作(通過網絡進行一些大的同步)。 這項漫長的任務是在后台線程中完成的。 然后,同一線程執行“公共初始化”,包括創建CLLocationManager對象。 當然,然后,后台線程很快就死掉了,而沒有任何RunLoop就離開了CLLocationManager。 在第二次啟動時,不需要進行大的同步,並且在UI線程上執行“通用初始化”。 因此,CLLocationManager在主RunLoop上運行,並愉快地提供了修復程序。
綜上所述:創建CLLocationManager對象時,在正確的線程(或NSRunLoop / CFRunLoop)上進行操作至關重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.