我想在我的应用启动时从网络加载一些数据。我设置了一个启动画面,并在 didFinishLaunchingWithOptions 中设置了 sleep(10)。现在我希望在这个时间间隔内我的应用程序调用 Web 服务并加载数据,但我无法做到这一点。请帮助我或提出任何建议。
5 回答
在睡眠期间,线程(在本例中为主线程)无法执行任何操作。
我建议您简单地显示启动画面,开始加载数据并在加载所有数据后隐藏启动画面。
大问题!
首先,不要让主线程休眠,在那里什么都不起作用,所以这只是在浪费时间。
相反,设置类似于不断运行 UIScrollView 的更新页面,只有在获取数据时才会消失。
使用 Web 服务的委托,通过它您可以调用 AppDelegate 中的一个函数来删除加载器视图并添加 HOMEPAGE,当数据已被提取时。
就像是,
这只是一个例子......
- (void) webserviceDidFinishLoading //write in appdelegate.m
{
[self.activityIndicatorView removeFromSuperView];
self.window.rootController = self.homeViewController;
}
希望这可以帮助!:)
休眠主线程并长时间显示启动屏幕不是一个好主意。您可以通过遵循一个简单的技巧来实现相同的目标。我认为在您的情况下,服务是在隐藏启动画面后从第一个视图控制器调用的。因此,您可以创建一个包含相同图像的模式视图,如启动屏幕。并显示如下:
SLSDummySplash *dummySplash = [self.storyboard instantiateViewControllerWithIdentifier:@"splashId"];
[self presentViewController:dummySplash animated:NO completion:nil];
当您完成服务调用/长加载事件时,只需关闭模式视图。
嘿,伙计,请参阅下面的代码..
- (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];
}
我希望这可以帮助你...
:)
请看这里:https ://github.com/k06a/LaunchScreenViewController 。
在应用的第一个视图控制器出现之前显示启动视图控制器。当您完成从 Web 加载数据或初始化后,关闭启动视图控制器。
在特定时间后休眠或执行选择器不是正确的方法,因为您永远不知道要等待多少时间,这取决于糟糕的互联网连接。