2012-02-08 60 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

相关问题