使用SudzC生成ARC版Obj-C代码出现返回结果为nil的疑问与暂时解决办法

近来几个使用web services的项目都是利用SudzC来生成Obj-C的处理代码,一直都用得很好,也很方便。

之前的项目都是非ARC的,新近建立了一个ARC的项目,而SudzC也有相应的生成ARC版本的代码,于是像以往以往加入使用。

今天在调试这个项目的时候,发现web services返回的结果都是nil的,而请求返回的结果却不为空。(通过log打印可知)

设置断点调试,发现是以下代码执行后返回空值。

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

继续跟进调试,xml的节点返回的是:(CXMLNode* child的打印结果)

<CXMLElement 0x7591210 [0x7588bb0] soap:Body <soap:Body><DoLoginResponse xmlns="http://tempuri.org/"><DoLoginResult>{...}</DoLoginResult></DoLoginResponse></soap:Body>>

回看之前做的几个web services项目,打印的结果是类似这样的:

<CXMLElement 0x7594050 [0x81b95a0] Body <Body><ValidateUserLoginResponse><ValidateUserLoginResult>{"Email":"sing@163.com","ErrMsg":"","MobilePhone":"13725373425","UserName":"sing"}</ValidateUserLoginResult></ValidateUserLoginResponse></Body>>

问题就出在两次获取的节点的key不同,一个是soap:Body,一个是Body,但以下代码两个项目中都是一样的:

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

故此会出现最新的web services项目获取到的element为空值的情况了。

将获取节点的代码改成如下就解决了返回空值的问题了。

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

问题是解决了,但奇怪的是不使用ARC版本处理就完全没问题,使用了ARC版本却要修改代码才能获取到正确的结果,尝试进一步调试查找最终原因,但终究因为代码量较大,也没有太多时间深入了解,所以只能作罢。google了一把,发现也有人出现这样的问题,也是只能自己手动改代码而找不出原因。看来这个问题还是要留给作者自己去处理了,我是心有余而力不足啊。这篇文章也算是标记一下出现的问题,等以后该问题解决了看看出问题的根源是在哪里。

btw,今天想利用SudzC重新生成一次代码,结果却出现无法生成代码,php执行出错的问题。希望作者能尽早发现,尽快修正。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值