从另一个类调用Web服务
我将直接从示例来解释我的问题: 我有一个Webservice类,它具有用于调用Web服务的所有委托方法,然后解析responseXML。 我们在这个类中编写了一个方法,用于启动Web服务调用和XML解析。其他两个类假设A & B想要通过调用上述方法来使用此webservice。从另一个类调用Web服务
//Class A
#import "Webservice.h"
- viewDidLoad
{
Webservice *ws = [[Webservice alloc] init];
[ws callWebservice];
statement 1..
Statement 2..
...
}
现在发生的事情是[ws callWebservice];此方法被调用,但没有在A类执行的语句1,语句2后执行写入WebService类
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
以下委托方法返回,则控制返回到上述这些方法。 问题:如何在执行语句1,语句2之前调用上述三种方法,因为我想在这两个语句中使用解析的数据。
请帮忙。 Thnx
您的webservice类可能异步访问Web,允许调用线程直接继续执行其语句。直接的(但不是很好)的解决方案是不要那个webservice类异步调用net-functions,但是然后你的调用方法会挂起,这可能不是你想要的。
您的webservice类可能将自己注册为连接类的委托。我会做一个协议WebserviceDelegate,在其中您可以定义一些方法被调用的Web服务的调用,这样的事情:
@protocol WebserviceDelegate
- (void)webserviceCallFinished;
@end
你WebService类将不得不委托财产:
@interface Webservice {
id<WebserviceDelegate> delegate;
// other ivars
}
@property (assign) id<WebserviceDelegate> delegate;
// other methods
@end
然后,我将注册调用类(Class A)作为Webservice实例的(WS)委托(ws.delegate = self)。在那之后调用webservice([ws callWebservice])。之后,显示旋转动画或其他内容,但在此之后,viewDidLoad方法完成。
然后,我会有这样的连接:didReceiveResponse:resonse,connection:didReceiveData:data和connectionDidFinishLoading:委托方法调用webservice委托上的方法。
所以,你调用类会是什么样子:
- (void)viewDidLoad
{
Webservice *ws = [[Webservice alloc] init];
ws.delegate = self;
[ws callWebservice];
[ws release];
}
- (void)webserviceCallFinished
{
// Statement 1
// Statement 2
}
当你的web服务类将调用delegate.webserviceCallFinished方法时approprate
我已经找到了答案。 我所做的是在另一个线程上调用webservice,然后在currentrunloop中添加调用。然后逐步调用相关的连接方法。 如果有人正在寻找相同的东西让我知道我会详细写。 Thnx为您的所有答复。他们为我工作。 rgds .. amit
Thnx很多我认为这是我想要的将尝试这一点。 – AmJa 2009-07-09 04:45:42