我想每隔30分钟从服务器中提取一些数据并设置本地通知以提醒用户,我在下面的代码中执行此操作。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSString *value = [[NSUserDefaults standardUserDefaults]objectForKey:@"bgFetch"];
if ([Utilities isInternetConnectionAvailable]) {
if ([self.window.rootViewController isKindOfClass:[HomeViewController class]]){
HomeViewController *homeController = (HomeViewController*)self.window.rootViewController;
[homeController fetchDatawithCompletionHandler:^(UserData *userData, NSString *errorResponse) {
if (userData) {
if (![homeController isNotificationAvailvableForTheData:userData]) {
[homeController scheduleLocalNotificationForUserData:userData];
completionHandler(UIBackgroundFetchResultNewData);
}
}else{
completionHandler(UIBackgroundFetchResultFailed);
}
}];
}else{
completionHandler(UIBackgroundFetchResultNoData);
}
}else{
completionHandler(UIBackgroundFetchResultFailed);
}
}
我还启用了后台提取功能,并在plist中添加了“必需的后台模式”键。几小时后我检查时,没有设置本地通知。我在哪里做错了?
答案 0 :(得分:0)
我面临着同样的问题。每当我通过XCode模拟后台提取时,无论在模拟器还是在真实设备上,后台提取都能正常工作。如果我拔下电话并像往常一样使用它。我没有收到通知,或者我的代码没有执行。解决方案非常简单,我认为“模拟后台提取”的区别在于您的应用程序处于不同于日常工作的阶段。要使其工作,只需在后台线程上分派代码即可。我只是将代码包装在里面:
DispatchQueue.global(qos: .background).async
它奏效了。