使用touchXML在iOS中使用SOAP

时间:2012-02-02 15:09:07

标签: ios soap xsd touchxml

我正在使用sudz-c生成的SOAP框架,我的服务调用似乎工作正常,但当我尝试对数据做任何事情时,iOS(模拟器)崩溃。

这是服务电话......

[service hentOpgaveliste:self action:@selector(handleToDoList:) userid:userNameTxt.text pdaid:[pdaIdTxt.text intValue]];

对于handleToDoList:我使用的是示例中提供的标准方法,它成功地NSLog了我的结果。

....
CXMLNode *xmlResult = (CXMLNode*)value;
NSLog(@"HentToDo: %@", [xmlResult description]);
....

从这里,我得到你在下面看到的日志。

{
hentOpgavelisteResult =     {
    diffgram = "<null>";
    schema =         {
        element =             {
            complexType =                 {
                choice =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = "<null>";
                            };
                        };
                    };
                };
            };
        };
    };
};

当我尝试NSLog子计数时,如下所示,或任何其他CXMLNode实例方法,我得到以下异常。

....
NSLog(@"Children %@", [xmlResult childCount]);
....

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary childCount]: unrecognized selector sent to instance

不知道从哪里开始。我见过博客such as this谈论touchXML和命名空间的问题,但在我看来我有一个命名空间。

当谈到SOAP我是noob类时,任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

这是一个常见的错误;记录整数时,你应该使用%i而不是%@,如下所示:

NSLog(@"Children %i", [xmlResult childCount]);

%@仅用于记录对象。如果您尝试将整数记录为对象,则会发生崩溃,因为它认为它是指向内存中随机位置的指针,并尝试在其上调用描述方法。

此外,从您获得的例外情况来看,xmlResult是一个NSDictionary(CFDictionary是相同的),在这种情况下,您应该调用的方法是count,而不是childCount:

NSLog(@"Children %i", [xmlResult count]);

答案 1 :(得分:0)

用于打印计数..

你应该使用'%d'

前:

NSLog(@“儿童计数=%d”,[xmlResult childCount]);