所以我有这个函数来解析url字符串中的数据并设置标签。
- (void)viewDidLoad
{
[super viewDidLoad];
[self parseAndSetLabels];
}
问题在于,如果你的连接不好,可能需要一段时间,看起来像应用程序冻结了,但它实际上是在为视图设置动画之前执行parseAndSetLabels函数。
那么我如何制作viewLoad并在此之后运行我的函数?
(按此顺序排列)
-(void)main
{
[self viewDidLoad]
[self parseAndSetLabels];
}
答案 0 :(得分:4)
正如Nickolay O.所说,使用NSURLConnection
与其委托方法异步,或者您可以在parseAndSetLabels
方法中调用viewDidAppear:
方法。
将调用放在最后一个方法中,每次出现视图时都会调用它,但如果你不想这样,你可以使用简单的布尔条件只调用一次这个方法,如下例所示:
YourController.h
@property (nonatomic) BOOL condition;
YourController.m
-(void)viewDidLoad
{
[super viewDidLoad];
self.condition = YES;
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.condition)
{
[self parseAndSetLabels];
self.condition = NO;
}
}
但是,在您的情况下,NSURLConnection
及其代理是最佳解决方案。
答案 1 :(得分:1)
如果没有看到parseAndSetLabels
的内容,很难过于具体,但一般情况下,您不应该在viewDidLoad
代码中同步执行网络操作。您应该将标签设置为临时占位符,并启动异步调用,该异步调用接受在异步操作完成时执行的块。您应该从异步块内部设置标签的实际值。
答案 2 :(得分:0)
改为使用异步NSURLConnection(或辅助线程)。
答案 3 :(得分:0)
相反,您甚至可以在启动视图控制器之前下载和解析数据。因此,您只需使用已分析的数据在viewDidLoad方法中设置标签。 一旦您的应用程序在connectionDidfinishLoading中收到信号(如果您使用的是异步模式),您也可以启动viewcontroller。
如果有的话,你所说的视图控制器是根视图控制器,那么, 你使用同步调用Web服务或异步调用吗?但是你的意见会有所帮助。
答案 4 :(得分:0)
如果你想延迟表演:
[self performSelector:@selector(something) withObject:nil afterDelay:0.0f];