2017-06-28 36 views
0

我有這樣一段代碼在我的AppDelegate:背景取之謎

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 

    ApiHandler *ah = [[ApiHandler alloc]init]; 
    [ah login:^(BOOL succes) { 
     completionHandler(UIBackgroundFetchResultNewData); 
     [UIApplication sharedApplication].applicationIconBadgeNumber += 1000; 
    }]; 

} 

我希望這個代碼做,當iOS的認爲這是適當做背景的抓取:

  1. 執行我的ApiHandler的登錄方法,並在成功
  2. 告訴獲取機制一切正常
  3. 提出申請與1000

現在證件號碼,出於某種原因,徽章計數不升高,而登錄方法已成功完成,並且

[UIApplication sharedApplication].applicationIconBadgeNumber += 1000; 

斷點實際上打破了執行,我很擔心Fetch的成功完成。因爲,如果它不被認爲是成功的,就我所知,應用程序將停止嘗試最終獲取。

難道你們中的任何一位能指點我做錯了嗎? 在此先感謝

你真正

+3

我認爲'completionHandler'應該是最後一個叫做的東西。它表明你完成了你正在做的任何事情。 – Stonz2

+0

是的,你應該把completionHandler作爲最後一件事。此外,你應該檢查succes參數,如果false用UIBackgroundFetchResultFailed或UIBackgroundFetchResultNoData –

回答

0

你應該註冊通知設置證件號碼前。

UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; 

[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; 

[UIApplication sharedApplication].applicationIconBadgeNumber += 1000; 

注:

您可以將completionHandler(UIBackgroundFetchResultNewData);任何 哪裏。沒關係。

+0

調用completionHandler,請投票。 @Sjakelien –