2012-02-08 85 views
1

我是Objective C中的新手。我試圖使用sudcz來使用webservice。 我已經在PHP和MySQL中創建了Webservice服務器,現在我想與服務器交流並獲得相關結果。Objective C - sudzc,返回空的ArrayOfString,但xml響應包含數據

在調用方法時,我從服務器獲取了正確的XML響應,但返回的ArrayOfString類型的對象似乎爲空。 NSLog打印只是< ArrayOfString> </ArrayOfString>,我假設sudzc不是爲了解析XML到一個aproporiate形式,因此返回的對象是空的,我錯了嗎?或者我不能看到或處理返回的對象?有人得到任何線索嗎?

如果有任何需要的材料,我會發布它們。 Thx。

補充:

CXMLElementNode* element = [[Soap getNode: [doc rootElement] withName: @"Body"] childAtIndex:0]; 
    if(deserializeTo == nil) { 

     output = [Soap deserialize:element]; 

    } else { 
        NSLog(@"Deserialize to : %@", deserializeTo); 
     if([deserializeTo respondsToSelector: @selector(initWithNode:)]) 
          //problematic section 
          element = [element childAtIndex:0]; 
          NSLog(@"NSSstring element : %@", element); 
      output = [deserializeTo initWithNode: element]; 

        } else { 

      NSString* value = [[[element childAtIndex:0] childAtIndex:0] stringValue]; 
          NSLog(@"NSSstring value : %@", value); 
      output = [Soap convert: value toType: deserializeTo]; 
     } 
      NSLog(@"output : %@", output); 
    } 

我認爲存在問題的部分就是我的推杆意見存在問題的部分。因爲object元素是xml元素,並且在調用output = [deserializeTo initWithNode:element]之後,沒有任何反應,NSLog(輸出)在調用消息之前打印與打印NSLog(deserializeTo)相同的輸出initWithNode:元素對象deserializeTo 我懷疑SoapObject實例方法initWithNode它不會像它應該那樣工作,因爲 我的deserializeTo是類RSiArrayOfstring的一個實例,該類是SoapObject的子集,它將此消息委託給父類(SoapObject),並且在SoapObject中實現此消息的方法是:

// Called when initializing the object from a node 
- (id) initWithNode: (CXMLNode*) node { 
    if(self = [self init]) { 
    } 
    return self; 
} 

我不能看到與自變量節點任何操縱

執行此代碼期間從調試器的輸出:

2012-02-08 20:22:03.166 URS[1170:b603] Deserialize to : &lt;ArrayOfstring>&lt;/ArrayOfstring> 
2012-02-08 20:23:17.258 URS[1170:b603] NSSstring element : &lt;CXMLElement 0x5d7b920 [0x59701b0] return &lt;return arrayType="SOAP-ENC:Array[6]" type="SOAP-ENC:Array">&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">1 - Elektroúdržba&lt;/item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">2 - Zámočnícka dielňa&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">3 - Údržba žeriavov</item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">6 - Zámočnícká dielňa H4&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">4 - Mechanici&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">5 - Údržba CNC&lt; /item>&lt; /item>&lt; /return>> 
2012-02-08 20:56:11.353 URS[1170:b603] output : &lt; ArrayOfstring>&lt; /ArrayOfstring 
+0

sudcz我相信包括所有的來源,你有沒有嘗試過調試它? – Joe 2012-02-08 15:01:48

+0

關於sudcz,我將服務對象上的對象設置爲yes,我也是xcode中的新手,我使用的是xcode 4.x.你能否建議我用sudze調試任何步驟? – feko 2012-02-08 15:06:32

+0

開始[這裏](https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/Debugging/Debugging.html),如果你發現原因,什麼或者哪裏不工作,那麼用你的發現編輯你的答案,它會更容易幫助你。 – Joe 2012-02-08 15:14:06

回答

2

嗨,我剛剛遇到了同樣的問題。

我發現

[[Soap getNode: [doc rootElement] withName: @"Body"] 

省略標籤的命名空間。所以在我的情況下,XML部分看起來是這樣的:

<SOAP-ENV:Body>.... 

改變上述行:

[[Soap getNode: [doc rootElement] withName: @"SOAP-ENV:Body"] 

在我的案件有幫助。 Allthough我不確定命名空間是否因不同的soap實現而有所不同。

乾杯!

+0

同樣在這裏。你有沒有改變生成文件中的其他內容? – surlac 2012-10-15 10:58:07