Iphone 如何在显示启动屏幕时从web服务加载数据?

Iphone 如何在显示启动屏幕时从web服务加载数据?,iphone,objective-c,ios,xcode,splash-screen,Iphone,Objective C,Ios,Xcode,Splash Screen,我想在启动应用程序时从web加载一些数据。我已经设置了一个启动屏幕,在didFinishLaunchingWithOptions中我设置了睡眠(10)。现在,我希望在这个时间间隔内,我的应用程序调用web服务并加载数据,但我无法做到这一点。请帮帮我,或者给我一些建议 在睡眠期间,线程(在本例中为主线程)无法执行任何操作 我建议您只需显示启动屏幕,开始加载数据,并在加载所有数据后隐藏启动屏幕。大问题 首先,不要让主线程睡眠,那里没有任何东西可以工作,所以这只是浪费时间 取而代之的是,设置一个不断运

我想在启动应用程序时从web加载一些数据。我已经设置了一个启动屏幕,在didFinishLaunchingWithOptions中我设置了睡眠(10)。现在,我希望在这个时间间隔内,我的应用程序调用web服务并加载数据,但我无法做到这一点。请帮帮我,或者给我一些建议

在睡眠期间,线程(在本例中为主线程)无法执行任何操作

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

大问题

首先,不要让主线程睡眠,那里没有任何东西可以工作,所以这只是浪费时间

取而代之的是,设置一个不断运行UIScrollView的更新页面,它只有在获取数据后才会消失

使用webservice的委托,在获取数据时,可以通过该委托调用AppDelegate中的函数来删除加载程序视图并添加主页

大概

这只是一个例子

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

希望这有帮助!:)

嘿,伙计,看下面的代码

- (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];
}
我希望这能帮助你


:)

长时间休眠主线程并显示启动屏幕不是一个好主意。你可以通过一个简单的技巧来达到同样的效果。我认为在您的案例中,服务是在隐藏初始屏幕后从第一个视图控制器调用的。因此,您可以创建一个模式视图,其中包含与启动屏幕相同的图像。并显示如下所示:

SLSDummySplash *dummySplash = [self.storyboard instantiateViewControllerWithIdentifier:@"splashId"];
[self presentViewController:dummySplash animated:NO completion:nil];
完成服务调用/长时间加载事件后,只需关闭模式视图

请看这里:

在应用程序的第一个视图控制器出现之前显示splash view controller。从web加载数据或初始化完成后,请关闭splash view控制器


在特定时间后睡觉或执行选择器不是正确的方法,因为您永远不知道要等待多少时间,这取决于糟糕的internet连接

在您的窗口上添加一个与splash相同的图像的imageView,并将其放在前面,一旦web服务完成,将其删除。这种方法有什么缺点吗?这不是正确的方法。您不知道rest api调用或任何后台进程是否一定会在睡眠时间内完成。@K.K它在XCode 4中工作得非常完美。*这是正确的答案。如果你有任何其他答案,请在这里张贴。