2015-05-28 21 views
0

我正在開發一個iOS應用程序(Objective C),發生了一個奇怪的錯誤。我在一個對象中使用位置服務,該對象被創建並存儲爲根視圖控制器類的實例變量。該對象在viewDidLoad方法中初始化。當請求代碼執行時,iOS沒有請求位置服務

if (sunEventObject == nil) { 
    sunEventObject = [[SunEvent alloc] init]; 
} 

[sunEventObject updateLocation]; 

我已經運行到這個問題,該應用程序不要求對首批推出的應用程序的位置服務。我在使用Xcode進行調試的同時在設備上運行應用程序,並在

[locationManager requestAlwaysAuthorization]; 

行上設置斷點。該行在指定用於刷新位置的方法中存在於SunEvent類中。這行代碼執行,但該應用程序不請求位置服務權限。

作爲解決方法,我將此代碼放在didFinishLaunchingWithOptions方法的AppDelegate文件中。

CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
[locationManager requestAlwaysAuthorization]; 

這種解決方法的工作原理的大部分時間,現在,只是偶爾第一次啓動(應用程序的下載新鮮),仍然沒有被請求的位置服務。

我不知道這個問題可能是什麼。再次,代碼正在執行(我知道是因爲使用Xcode調試應用程序),但該應用程序並沒有像它應該做的那樣請求位置服務。

注意此應用程序僅針對iOS 8.x系統開發。

更新 info.plist文件具有NSLocationAlwaysUsageDescription項的正確密鑰和說明,所以不應該是問題。

+0

有你有你的plist中必要的密鑰? http://stackoverflow.com/a/24063578/78496 – chedabob

+0

* *如果您的 * Info.plist中沒有指定NSLocationAlwaysUsageDescription密鑰,則此方法不會執行任何操作,因爲您的應用程序將假定不是 *以支持Always授權。 –

+0

是的,我可以確認密鑰在我的info.plist文件中是正確的。這個bug只是偶爾發生(看似隨機),並且只在新發布時發生。如果您退出應用程序(無需強制退出)並再次打開它,則會請求位置服務。 –

回答

1

由於馬特,他的答案工作。我的錯誤已修復!

他的評論: 「看我的答案在這裏總結,你必須按照正確的邏輯:stackoverflow.com/a/30495310/341994