我有這段代碼並嘗試將變量NotAllSaved設置爲true,但在調用saveObject返回後,該變量再次爲false 。如何在調用方法中設置變量 - 例如[... {here}]
NotAllSaved=false
[healthStore saveObject:theSample withCompletion:^(BOOL success, NSError *error){
if (!success){
if (error.code==HKErrorAuthorizationDenied) {
NotAllSaved=true;
} else {
...
}
}
}];
if (NotAllSaved) {
// Does never come here
}
如何設置變量,以便我可以處理調用SaveObject之外的錯誤?如果我嘗試在那裏彈出提醒,則應用程序在顯示彈出窗口之前需要很長時間。
-
補充:
謝謝裂解和薩希卜羅伊,你的答案(和一些額外的谷歌搜索)解決我的問題,這樣對我的作品的解決辦法是這樣的:
__block bool NotAllSaved=false;
dispatch_group_t theWaitGroup = dispatch_group_create();
dispatch_group_enter(theWaitGroup);
[HDBI.healthStore saveObject:theSample withCompletion:^(BOOL success, NSError *error){
if (!success){
if (error.code==HKErrorAuthorizationDenied){
NotAllSaved=true;
} else {
.. .
}
}
dispatch_group_leave(theWaitGroup);
}];
dispatch_group_wait(theWaitGroup, DISPATCH_TIME_FOREVER);
if (NotAllSaved) {
您已經驗證花費很長時間來顯示錯誤的應用程序不僅僅是需要很長時間來執行完成塊的應用程序?如果它異步發生,完成塊中的代碼不會在同步函數的最後一行(if(NotAllSaved)語句)之後被調用。嘗試在if(!success)和if(NotAllSaved)上設置斷點並查看它們的執行順序。 – Lytic
我在那裏顯示了一個錯誤對話框(UIAlertView),並且無法解除它,所以出於某種原因,這不是一件好事。 –
嘗試將調用封裝在performOnMainThread或dispatch_async(dispatch_get_main_queue) – Lytic