我正在创建一个应用程序,我从服务器检索数据,如下所示:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[self retrievedatafromserver];
dispatch_async(dispatch_get_main_queue(), ^{
//UIUpdation, fetch the image/data from DB and update into your UI
});
});
即使应用程序转到后台,如何从服务器检索数据?
谢谢&问候 sumana
答案 0 :(得分:1)
如果您的项目范围仅在iOS 7中,那么您可以使用iOS 7及更高版本中的新背景模式。您可以在后台模式下获取数据,而无需任何额外的编码工作。
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
现在您的应用已经知道要启动后台提取,让我们告诉它该怎么做。方法-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
将有助于这样做。每次执行后台提取时都会调用此方法,并且该方法应包含在AppDelegate.m文件中。完整版本如下:
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController;
id topViewController = navigationController.topViewController;
if ([topViewController isKindOfClass:[ViewController class]]) {
[(ViewController*)topViewController insertNewObjectForFetchWithCompletionHandler:completionHandler];
} else {
NSLog(@"Not the right class %@.", [topViewController class]);
completionHandler(UIBackgroundFetchResultFailed);
}
}
现在在您的控制器中。喜欢那样
- (void)insertNewObjectForFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"Update the tableview.");
self.numberOfnewPosts = [self getRandomNumberBetween:0 to:4];
NSLog(@"%d new fetched objects",self.numberOfnewPosts);
for(int i = 0; i < self.numberOfnewPosts; i++){
int addPost = [self getRandomNumberBetween:0 to:(int)([self.possibleTableData count]-1)];
[self insertObject:[self.possibleTableData objectAtIndex:addPost]];
}
/*
At the end of the fetch, invoke the completion handler.
*/
completionHandler(UIBackgroundFetchResultNewData);
}
注意: - 如果您必须在iOS 6及更低版本上提供支持,请避免使用此方法。因为它不可用。
答案 1 :(得分:0)
当您的应用进入后台模式时。你可以访问代码几秒钟。假设后台队列仍在执行并且您输入了背景。然后你可能需要在应用程序输入前景时调用该方法。 (取一个bool变量并检查过程是否完成,如果过程完成没有问题。如果不再调用该方法。)。
如果您想让应用程序在后台模式下运行,那么您需要在plist中请求后台运行模式。请参阅此链接仅供参考我们可以激活后台运行模式的这些功能,您可以根据您的使用情况激活其中任何一个http://blogs.innovationm.com/support-for-applications-running-in-background-ios/