背景获取拼图
Background Fetch puzzle
我的 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 认为适合进行后台获取时,我希望此代码执行的操作是:
- 执行我的 ApiHandler 的 login 方法,并在成功后
- 告诉 Fetch 机制一切正常
- 申请徽章数量加1000
现在,由于某种原因,徽章计数没有增加,而 login 方法已成功完成,并且在
处设置了一个断点
[UIApplication sharedApplication].applicationIconBadgeNumber += 1000;
居然打断了执行,担心Fetch能否顺利完成。因为,据我所知,如果它不被认为是成功的,应用程序最终将停止尝试获取。
你们中的任何人都可以指出我在这里做错了什么吗?
提前致谢
真心的
在设置徽章编号之前,您应该注册通知。
UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
[UIApplication sharedApplication].applicationIconBadgeNumber += 1000;
注:
You can place completionHandler(UIBackgroundFetchResultNewData);
any
where. It doesn't matter.
我的 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 认为适合进行后台获取时,我希望此代码执行的操作是:
- 执行我的 ApiHandler 的 login 方法,并在成功后
- 告诉 Fetch 机制一切正常
- 申请徽章数量加1000
现在,由于某种原因,徽章计数没有增加,而 login 方法已成功完成,并且在
处设置了一个断点[UIApplication sharedApplication].applicationIconBadgeNumber += 1000;
居然打断了执行,担心Fetch能否顺利完成。因为,据我所知,如果它不被认为是成功的,应用程序最终将停止尝试获取。
你们中的任何人都可以指出我在这里做错了什么吗? 提前致谢
真心的
在设置徽章编号之前,您应该注册通知。
UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
[UIApplication sharedApplication].applicationIconBadgeNumber += 1000;
注:
You can place
completionHandler(UIBackgroundFetchResultNewData);
any where. It doesn't matter.