如何在显示启动画面时从Web服务加载数据?

时间:2012-10-04 07:18:19

标签: iphone objective-c ios xcode splash-screen

我想在应用启动时从网站加载一些数据。我设置了一个启动画面,在didFinishLaunchingWithOptions中我设置了sleep(10)。现在我希望在这个时间间隔内我的应用程序调用Web服务并加载数据,但我无法做到这一点。请帮帮我或提出任何建议。

5 个答案:

答案 0 :(得分:1)

在睡眠期间,线程(在这种情况下,主线程)无法执行任何操作。

我建议您只需显示启动画面,开始加载数据并在加载完所有数据后隐藏启动画面。

答案 1 :(得分:0)

大问题!

首先,不要让主线程睡眠,没有什么能在那里工作,所以只是浪费时间。

相反,设置类似于不断运行UIScrollView的更新页面,只有在获取数据时才会消失。

使用webservice的委托,通过该委托,您可以调用AppDelegate中的函数来删除Loader View并在获取数据时添加HOMEPAGE。

类似的东西,

这只是一个例子......

- (void) webserviceDidFinishLoading  //write in appdelegate.m
{
      [self.activityIndicatorView removeFromSuperView];
      self.window.rootController = self.homeViewController;
}

希望这有帮助! :)

答案 2 :(得分:0)

嘿伙伴见波纹管代码..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    {
        splashView = [[UIImageView alloc] initWithFrame:iphoneFrame];
        splashView.image = [UIImage imageNamed:@"Default"];
        [self.window addSubview:splashView];
        //// load you web-service here and get data. After 2 sec iphone rootview controller will display
        [self performSelector:@selector(loadViewIphone) withObject:nil afterDelay:2.0];
     }
}

-(void)loadViewIphone 
{
    [splashView removeFromSuperview];

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFade];
    [animation setDuration:0.5];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[self.window layer] addAnimation:animation forKey:kAnimationKey];
}

我希望这可以帮助你...

:)

答案 3 :(得分:0)

睡觉主线程并长时间显示启动画面并不是一个好主意。你可以通过一个简单的技巧来实现同样的目的。我认为在你的情况下,服务是在隐藏启动画面后从第一个视图控制器调用的。因此,您可以创建包含相同图像(如启动画面)的模态视图。并显示如下:

SLSDummySplash *dummySplash = [self.storyboard instantiateViewControllerWithIdentifier:@"splashId"];
[self presentViewController:dummySplash animated:NO completion:nil];

完成服务调用/长加载事件后,只需关闭模态视图。

答案 4 :(得分:0)

请参见此处:https://github.com/k06a/LaunchScreenViewController

在app的第一个视图控制器出现之前显示启动视图控制器。完成从Web加载数据或初始化后,关闭启动视图控制器。

在特定时间后睡觉或执行选择器不是正确的方法,因为根据互联网连接不良,你永远不知道要等多少。