2012-02-18 85 views
1

我確信這對您的專家來說非常簡單。 SUDZC設置好了,一切似乎都正常工作,但是當一個值返回給委託時,它是空的。 NSLog顯示正確的XML響應,所以我知道它正常工作,但代碼中的值顯示爲空。 SUDZC附帶一個示例程序,這是它的運行方式。我在Web服務「WhatsYourFavoriteMovie」上創建了一個測試函數,它返回「低俗小說」。記錄清楚地顯示了這個值被返回。爲什麼最終值(null)?請幫忙,謝謝。sudzc 101(回答問題)

,所以我打電話......

[service WhatsYourFavoriteMovie:self action:@selector(WhatsYourFavoriteMovieHandler:) userid: 1]; 

,然後當它進入Web服務響應...

// Handle the response from WhatsYourFavoriteMovie. 
- (void) WhatsYourFavoriteMovieHandler: (id) value { 

// Handle errors 
if([value isKindOfClass:[NSError class]]) { 
NSLog(@"%@", value); 
return; 
} 

// Handle faults 
if([value isKindOfClass:[SoapFault class]]) { 
NSLog(@"%@", value); 
return; 
} 


// Do something with the NSString* result 
NSString* result = (NSString*)value; 
NSLog(@"WhatsYourFavoriteMovie returned the value: %@", result); 
} 

但 「價值」 和 「結果」 總是 '空' ...你可以在下面的NSLog輸出中看到它正在標籤中返回「Pulp Fiction」。我哪裏錯了?

2012-02-17 17:27:41.487 SudzCExamples[2782:f803] Loading:  https://www.mydomain.com/tk_services/tk.asmx 

2012-02-17 17:27:41.491 SudzCExamples[2782:f803] <?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"  
xmlns="com.mynamespace"><soap:Body><WhatsYourFavoriteMovie> 
<userid>1</userid></WhatsYourFavoriteMovie></soap:Body></soap:Envelope> 

2012-02-17 17:27:41.497 SudzCExamples[2782:f803] 
Applications are expected to have a root view controller at the end of application launch 

2012-02-17 17:27:45.947 SudzCExamples[2782:f803] 
<?xml version="1.0" encoding="utf-8"?><soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 
<WhatsYourFavoriteMovieResponse xmlns="com.mynamespace"> 
<WhatsYourFavoriteMovieResult>Pulp Fiction</WhatsYourFavoriteMovieResult> 
</WhatsYourFavoriteMovieResponse></soap:Body></soap:Envelope> 

2012-02-17 17:27:45.949 SudzCExamples[2782:f803] WhatsYourFavoriteMovie returned the value: (null)" 

再次,你可以在日誌中它得到了來自服務器的值「低俗小說」,但日誌的最後一行說,它返回值「空」看。請幫幫我!!謝謝。

+0

看看Phil Hale的回答,我遇到了同樣的問題,它適用於我。如果它解決了您的問題,請記住接受答案。 – 2012-04-05 22:29:59

回答

3

我有完全相同的問題與ARC版的Sudzc生成的代碼,但無論何種原因,非ARC版本工作正常

UPDATE

看看這個issue report。我在第一條評論中提出了修改建議,而ARC版本正常工作。

0

請嘗試NSLog在didrecivedata中的響應。在類SoapRequest.m

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)value { 

    NSString *str=[[NSString alloc]initWithData:value encoding:NSUTF8StringEncoding]; 

    NSLog(@"data receives %@",str); 

} 

然後,你會知道確切的問題是什麼。 這樣做後發表回覆,我們會幫你按照。

+0

當我將此日誌記錄添加到SoapRequest.m中時,我在響應中看到完整的SOAP信封。但是,我的處理程序(根據Sudzc文檔編碼)返回null值。有任何想法嗎? – pmartin 2012-03-13 01:12:32

+0

你可以發佈這個NSLog嗎? – Rupesh 2012-03-13 04:48:34

+0

我的日誌與凱文添加到原文中的日誌相同。 NSLog顯示正在返回的完整正確的SOAP信封,但委託方法的值參數爲空。 – pmartin 2012-03-13 11:58:42

0

如果您使用的是ARC版,SoapRequest,改線

CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"Body"] childAtIndex:0]; 

CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"soap:Body"] childAtIndex:0]; 
+0

這對我不起作用,我不明白爲什麼它將。 「soap」是一個名稱空間前綴 - 不是元素的名稱。當代碼是:'CXMLNode * element = [[Soap getNode:[doc rootElement] withName:@「Body」] childAtIndex:0];''所以我不認爲這個是問題。 – pmartin 2012-03-13 01:08:48

+0

...或者至少在所有報告的症狀中並不總是解決問題的方法。 – pmartin 2012-03-13 01:16:54