仅在调用所有Web服务后执行一段代码

时间:2012-03-21 17:05:43

标签: iphone web-services uiviewcontroller

点击按钮,我正在调用一个Web服务,然后我推送UIViewController。我的UIViewController应该加载从Web服务获得的数据。但是目前,在调用我的Web服务之前,正在推送UIViewController。在完成所有Web服务调用并检索数据之前,我该怎么做才能确保未加载UIViewController

这是我正在使用的代码。

 MyWebService *webservice = [MyWebService myWebService];
webservice.delegate = self;
[webservice getMyDataWithMyNumber:mySharedNumber myOldNumber:temp];
[webservice getvDetailsWithmyData:myData myNumber:myNumber];

MyViewController *myViewController = [[MyViewController alloc]initWithNibName:@"MyViewController" bundle:nil];
[self.navigationController pushViewController: myViewController animated:YES];
[myViewController release];

编辑:只有在调用两个Web服务后才应推送UIViewController。 我将数组传递给新的UIViewController。在Web服务调用期间添加阵列对象。我无法找到一种方法来做到这一点。需要帮忙。感谢。

2 个答案:

答案 0 :(得分:2)

您的Web服务需要在完成后回调到视图控制器。

这通常使用委托模式完成,但您可以使用其他技术。

您的第一个视图控制器会将自己作为委托传递给MyWebService。 MyWebService完成了它需要做的事情,当它完成时,它会在其委托上调用一个方法,即视图控制器。

在此回调方法中,您可以推送下一个视图控制器。

您还应该考虑用户体验。用户想要一个响应设备,或至少某些指示正在发生的事情。因此,在调用Web服务时,请显示加载指示符。或者,立即推送下一个视图控制器,然后从下一个视图控制器viewWillAppear方法调用Web服务(再次显示某种加载反馈)。

..我只是重新阅读并注意到还有更多内容。您有多个单独的Web服务调用。那些2总是被召集在一起吗?你可以在每个返回时使用bool标志,只有在两者都返回时才推送。我宁愿直接推动新的视图控制器,加载它们并让它们独立返回到新的视图控制器。

更新实例

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated]
    MyWebService *webservice = [MyWebService myWebService];
    webservice.delegate = self;
    [webservice getMyDataWithMyNumber:mySharedNumber myOldNumber:temp];
    [webservice getvDetailsWithmyData:myData SmartJoinderNumber:myNumber];
    //assume internally these web service calls aggregate into one response
}

- (void) myWebService:(MyWebService *)webService didRespondWith:(NSData *)data {
    MyViewController *myViewController = [[MyViewController alloc]initWithNibName:@"MyViewController" bundle:nil];
    [self.navigationController pushViewController: myViewController animated:YES];
    [myViewController release];
}

答案 1 :(得分:1)

In your case, Apple has recommended to use delegate pattern.

Here's an answer about delegate, that might help you to understand delegate concepts:
http://stackoverflow.com/questions/1089737/parsing-xml-in-cocoa/1090170#1090170