视图加载后调用函数

时间:2012-02-13 14:28:31

标签: ios

所以我有这个函数来解析url字符串中的数据并设置标签。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self parseAndSetLabels];
}

问题在于,如果你的连接不好,可能需要一段时间,看起来像应用程序冻结了,但它实际上是在为视图设置动画之前执行parseAndSetLabels函数。

那么我如何制作viewLoad并在此之后运行我的函数?

(按此顺序排列)

-(void)main
{
     [self viewDidLoad]
     [self parseAndSetLabels];
}

5 个答案:

答案 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];