2009-07-08 90 views
2

我將直接從示例來解釋我的問題: 我有一個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

回答

2

您的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

0

我已經找到了答案。 我所做的是在另一個線程上調用webservice,然後在currentrunloop中添加調用。然後逐步調用相關的連接方法。 如果有人正在尋找相同的東西讓我知道我會詳細寫。 Thnx爲您的所有答覆。他們爲我工作。 rgds .. amit