gpt4 book ai didi

iphone - 从另一个类调用 Web 服务

转载 作者:行者123 更新时间:2023-12-03 21:13:37 27 4
gpt4 key购买 nike

我直接从例子开始解释我的问题:我有一个 Webservice 类,其中包含用于调用 Web 服务然后解析responseXML 的所有委托(delegate)方法。我们在此类中编写了一种方法来启动 Web 服务调用和 XML 解析。另外两个类假设 A 和 B 想要通过调用上述方法来使用此 Web 服务。

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

现在发生的是 [ws callWebservice];该方法被调用但返回而不执行 Webservice 类中编写的以下委托(delegate)方法

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
-(void)connectionDidFinishLoading:(NSURLConnection *)connection

在类 A 中执行语句 1、语句 2 后,控制返回到这些方法之上。问题:如何在语句1、语句2执行之前调用以上三个方法,因为我想在这两个语句中使用解析后的数据。
请帮忙。谢谢

最佳答案

您的 Webservice 类可能会异步访问 Web,从而允许调用线程直接继续执行其语句。直接(但不是很好)的解决方案是不让该 webservice 类异步调用网络函数,但是这样你的调用方法就会挂起,这可能不是你想要的。

您的 Webservice 类可能将自身注册为连接类的委托(delegate)。我将创建一个协议(protocol) WebserviceDelegate,在其中定义一些在 Web 服务的调用者上调用的方法,如下所示:

@protocol WebserviceDelegate
- (void)webserviceCallFinished;
@end

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

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

然后我将调用类(A 类)注册为 Web 服务实例的 (ws) 委托(delegate) (ws.delegate = self)。之后调用 Web 服务 ([ws callWebservice])。之后,显示旋转动画或其他内容,但紧接着,viewDidLoad 方法就完成了。

然后,我将使用这些 connection:didReceiveResponse:resonse、connection:didReceiveData:data 和 connectionDidFinishLoading: 委托(delegate)方法调用 Web 服务委托(delegate)上的方法。

因此,您的调用类将如下所示:

- (void)viewDidLoad
{
Webservice *ws = [[Webservice alloc] init];
ws.delegate = self;
[ws callWebservice];
[ws release];
}
- (void)webserviceCallFinished
{
// Statement 1
// Statement 2
}

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

关于iphone - 从另一个类调用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com