我有一個使用通訊簿的應用程序。在iOS 6中運行時,當用戶執行需要通訊簿訪問權限的操作時,它將運行此代碼。if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined){ ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { if (granted) { showContactChooser(); } }); CFRelease(addressBookRef);}else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){ showContactChooser();}else{ showAccessDeniedAlert();}這非常正常:我能夠讀取聯系人信息,并且當用戶拒絕訪問時,應用程序會做出相應的反應。但是,如果用戶:允許聯系人在應用中訪問,退出該應用,轉到“設置”->“隱私”->“聯系人”,并禁用該應用的“聯系人”訪問權限,運行該應用,當應用在后臺運行時,進入設置并啟用該應用的“聯系人”訪問權限,該應用程序立即崩潰main(),沒有異常信息或有意義的堆棧跟蹤。我試圖打開“所有異?!焙蚚NSException raise]斷點,但這并沒有給我更多信息。即使該應用在啟動過程中未運行上述代碼,也可以重現崩潰。這里發生了什么事?我應該訂閱一個回調嗎?
3 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
我已經在自己的應用程序中看到了這一點。我也看到其他人也報告了這一點。我很確定這是故意的行為。該操作系統會殺死對隱私權限更改有反應的所有后臺應用程序。蘋果似乎對此采取了大錘的態度。這不是崩潰(盡管在調試器中運行時可能會出現)。應用因其他各種原因而終止。將此添加到原因列表中。這使我們有更多理由在完全重啟應用程序后做好恢復應用程序狀態的工作。
請注意,此行為適用于所有各種隱私設置,例如聯系人,照片,麥克風,日歷和相機。

九州編程
TA貢獻1785條經驗 獲得超4個贊
通常,當應用程序從掛起狀態恢復時,應從AppDelegate調用application:didEnterForeground。我認為,這將是您重新調整通訊簿權限的好地方。

浮云間
TA貢獻1829條經驗 獲得超4個贊
在與iOS 7日歷相關的應用中的工作原理相同。如果您在設備上運行應用程序,而不是通過Xcode調試或模擬器運行,則會看到該應用程序重新啟動,用戶看不到。因此,正如rmaddy所說,只要確保您的應用程序“在完全重啟后就可以很好地恢復應用程序狀態……”
- 3 回答
- 0 關注
- 461 瀏覽
添加回答
舉報
0/150
提交
取消