从另一个类调用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

+0

Thnx很多我认为这是我想要的将尝试这一点。 – AmJa 2009-07-09 04:45:42

我已经找到了答案。 我所做的是在另一个线程上调用webservice,然后在currentrunloop中添加调用。然后逐步调用相关的连接方法。 如果有人正在寻找相同的东西让我知道我会详细写。 Thnx为您的所有答复。他们为我工作。 rgds .. amit