2

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

4

5 回答 5

1

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

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

于 2012-10-04T07:22:28.590 回答
0

大问题!

首先,不要让主线程休眠,在那里什么都不起作用,所以这只是在浪费时间。

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

使用 Web 服务的委托,通过它您可以调用 AppDelegate 中的一个函数来删除加载器视图并添加 HOMEPAGE,当数据已被提取时。

就像是,

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

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

希望这可以帮助!:)

于 2012-10-04T07:27:40.620 回答
0

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

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

当您完成服务调用/长加载事件时,只需关闭模式视图。

于 2014-05-25T12:09:39.667 回答
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];
}

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

:)

于 2012-10-04T07:30:29.417 回答
0

请看这里:https ://github.com/k06a/LaunchScreenViewController 。

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

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

于 2016-05-17T05:29:30.520 回答