我有一個使用通訊簿的應用程序。在iOS 6中運行時,當用戶執(zhí)行需要通訊簿訪問權限的操作時,它將運行此代碼。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();}這非常正常:我能夠讀取聯(lián)系人信息,并且當用戶拒絕訪問時,應用程序會做出相應的反應。但是,如果用戶:允許聯(lián)系人在應用中訪問,退出該應用,轉到“設置”->“隱私”->“聯(lián)系人”,并禁用該應用的“聯(lián)系人”訪問權限,運行該應用,當應用在后臺運行時,進入設置并啟用該應用的“聯(lián)系人”訪問權限,該應用程序立即崩潰main(),沒有異常信息或有意義的堆棧跟蹤。我試圖打開“所有異常”和[NSException raise]斷點,但這并沒有給我更多信息。即使該應用在啟動過程中未運行上述代碼,也可以重現(xiàn)崩潰。這里發(fā)生了什么事?我應該訂閱一個回調嗎?
3 回答

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

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
通常,當應用程序從掛起狀態(tài)恢復時,應從AppDelegate調用application:didEnterForeground。我認為,這將是您重新調整通訊簿權限的好地方。

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