从另一个类调用Web服务

时间:2009-07-08 06:56:13

标签: iphone

我将直接从示例开始解释我的问题: 我有一个Webservice类,它具有用于调用Web服务的所有委托方法,然后解析responseXML。 我们在这个类中编写了一个方法来启动webservice调用和XML解析。另外两个班级假设A& B想要通过调用上述方法来使用此Web服务。

//Class A
#import "Webservice.h"
- viewDidLoad
{
Webservice *ws = [[Webservice alloc] init];
[ws callWebservice];
statement 1..
Statement 2..
...   
}

现在发生的事情是[ws callWebservice];调用此方法但返回时不执行Webservice类

中编写的以下委托方法
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection

执行语句1,类A中的语句2后,控件返回上面的这些方法。 问题:如何在执行语句1,语句2之前调用上述三种方法,因为我想在这两个语句中使用已解析的数据。
请帮忙。 日Thnx

2 个答案:

答案 0 :(得分:2)

您的webservice类可能异步访问Web,允许调用线程直接继续执行其语句。直接(但不是那么好)的解决方案是不要让webservice类异步调用net-functions,但是你的调用方法会挂起,这可能不是你想要的。

您的webservice类可能将自己注册为连接类的委托。我创建了一个协议WebserviceDelegate,在其中定义了一些在webservice的调用者上调用的方法,如下所示:

@protocol WebserviceDelegate
- (void)webserviceCallFinished;
@end

您的Webservice类将具有委托属性:

@interface Webservice {
    id<WebserviceDelegate> delegate;
    // other ivars
}
@property (assign) id<WebserviceDelegate> delegate;
// other methods
@end

然后我将调用类(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
}

虽然您的Webservice类在适当时会调用delegate.webserviceCallFinished方法

答案 1 :(得分:0)

我找到了答案。 我所做的是在另一个线程上调用webservice,然后在currentrunloop中添加调用。然后逐步调用相关的连接方法。 如果有人在寻找同样的信息,请告诉我,我会详细说明。 Thnx用于所有回复。他们为我工作。 RGDS .. 阿米特