如何将值数组传递给SudzC生成的Web服务类?

时间:2011-02-09 10:05:13

标签: objective-c soap ios4 touchxml sudzc

我有一个从WSDL生成的sudzc服务类,它接受一个ArrayOfInt和ArrayOfString对象作为参数。服务方法签名是这样的:

- (SoapRequest*) Search: (id <SoapDelegate>) handler filters: (NSMutableArray*) displayedAttributes: (NSMutableArray*) displayedAttributes;

我的问题是,如何将值传递给期望NSMutableArrays的参数?

在上面的方法签名中,“displayedAttributes”参数需要一个ArrayOfInt对象(应在int标记中填充多个整数,例如<int>1</int><int>2</int><int>3</int>等)。

然而,我尝试过的这些事情都没有奏效:

  • 直接传递(int)对象的NSArray / NSMutableArray
  • 直接传递NSNumber对象的NSArray / NSMutableArray
  • 传递包含@“1”,@“2”,@“3”等字符串的数组
  • 传递已包含@"<int>1</int>"@"<int>2</int>"
  • 的字符串数组
  • 根据整数构建一个字符串CXMLDocument

我确信这在下载的随附文档中有所解释 - 目前我还不清楚。

3 个答案:

答案 0 :(得分:1)

@Jon Limjap:幸运的是你!它询问你之前已经处理过的类型,我有自己为我生成的自定义类类型(!)...它只在传递CXMLNode时初始化,(需要CXMLDocument / CXMLElement)..我不知道如何处理这种类型...

一个实例是:filter是一个类,我有一个类的过滤器,但没有办法初始化它,(除了alloc-init然后设置它的属性,但它的属性是另一个这样的自定义类型.. !!!!)...如果你知道任何“技巧”告诉/配置sudzc允许我们传递对象或获取可可类型的对象,请告诉我....

答案 1 :(得分:0)

我有类似的情况将对象数组传递给SOAP请求。我设法通过以下更改来实现它。

未在

中添加SOAP数组的情况
+(NSString *) serialize: (id) object()
{
//look if it is array not implemented
}

所以我设法改变了以下方法

+ (NSString*) serialize: (id) object withName: (NSString*) nodeName {
    if([object respondsToSelector:@selector(serialize:)]) {
        if([object isKindOfClass:[SoapArray class]]) 
            return [object serialize:object];
        return [object serialize: nodeName];
    }
    NSString *temp =[NSString stringWithFormat:@"<%@>%@</%@>", nodeName, [Soap serialize: object], nodeName];
    NSLog(@"serialise = %@", temp);
    return temp;
}
在SOAP请求时

NSMutableArray arr = [[MYTable_STUB_ARR alloc] init]

MYTABLE_OBJ *obj = [[MYTABLE_OBJ alloc] init];

[arr addObject:obj];

[obj release];

传递元素arr对象你的SOAP请求??

答案 2 :(得分:0)

这有点老了,但我希望它会帮助别人。我以这种方式在SoapArray上实现了serialize:方法:

- (NSMutableString *)serialize:(NSString *)name
{
    NSMutableString *str = [NSMutableString string];
    //[str appendFormat:@"<%@>", name];
    for (id content in self)
    {
        //[str appendString:[Soap serialize:content]];
        [str appendString:[Soap serialize:content withName:name]];
    }
    //[str appendFormat:@"</%@>", name];
    return str;
}

如您所见,有一些注释行。如果取消注释它们并在for中注释当前使用的那个,您将获得一个名为name的标记,该标记将包含用内容类名称标记的对象。