NSXMLParser和视图生命周期中的多个调用。

时间:2012-02-02 07:01:22

标签: objective-c nsxmlparser

目前我在-(void)viewDidLoad中使用两个函数时遇到问题,这两个函数都使用NSUrlRequestHTTPPost发送到网络服务来接收数据。

它工作得很好,直到[self bar]完全结束后[self foo]决定开始。那么,在启动[self foo]之前,是否有任何智能方法可以检查[self bar]是否完全完成?

-(void)viewDidLoad{

[self foo]; // initiates a nsxmlparsercall to a webservice to get values.

[self bar]; // relies on the values recieved from [self foo] to make it's own call.

            /* However, [self bar] always crashes before initiating it's request.
            /* It crashes when the variables that are being sent with the poststring 
            /* are being set, as they are null. 
            /* Which means that the `[self foo]` doesnt get completed before starting [self bar];
}

此时我可能会非常离开,我甚至考虑重写-(void)viewDidload并设置一个bool来控制何时可以触发第二个函数,但这似乎是超级糟糕的编码..

任何有关如何指导我正确方向的建议和/或提示都将受到高度赞赏。提前致谢。

2 个答案:

答案 0 :(得分:1)

我最好放置你的函数将是nsxmlparser的委托方法之一

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    [self bar];
}

如果要在后台线程上解析响应,这很好,如果在主线程或后台线程上调用功能栏也无关紧要。

但是如果你想在主线程上专门调用bar函数,那么你可以使用这个函数

[self performSelectorOnMainThread:@SEL(bar) withObject:nil waitUntilDone:YES];

答案 1 :(得分:0)

你的意思是在[self foo]函数中你要解析一些东西,当它被完全解析然后你想调用[self bar];功能对吗?

好的,然后你可以在解析完成时发出通知。通过此通知,您可以调用所需的方法。