点击按钮,我正在调用一个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服务调用期间添加阵列对象。我无法找到一种方法来做到这一点。需要帮忙。感谢。
答案 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