2011-12-27 10 views
10

He estado tratando de obtener un servicio web usando Sudzc. Cada vez que convierto mi WSDL en obj-c sin conteo automático de referencias, funciona bien. El problema es que estamos construyendo todas nuestras aplicaciones en iOS 5 ahora y todo nuestro código usa ARC. Sudzc ahora también te permite crear un paquete con ARC habilitado pero cuando ejecuto este código siempre devuelve nulo.Sudzc con iOS 5 y ARC

He intentado depurar el código de Sudzc y recibe una respuesta xml correcta del servicio. En algún lugar, algo se pierde en la traducción. Traté de convertir el código Sudzc de trabajo sin ARC en código con ARC habilitado, pero tan pronto como he reparado todos los errores, vuelve a cero.

¿Alguien se encontró con esto y sabe lo que está pasando? Me ahorraría un montón de tiempo sin tener que depurar todo el código Sudzc por mi cuenta.

+0

Como siempre 12 minutos después de encontrar el valor para enviar una pregunta he encontrado la solución. Marqué las clases de Sudzc con -no-objc-arc y ahora puedo usar el código de trabajo anterior. Como un usuario bastante nuevo de obj-c, no sabía que existía ... – Twan

+0

Estoy teniendo el mismo problema y probablemente sea un usuario más nuevo que usted :) Honestamente, no sé a qué se refiere con marcar con -no -objc-arc, ¿puedes explicar esto? –

+0

Considere publicar eso como una respuesta y márquelo como aceptado para que esta pregunta se considere resuelta. Mientras lo hace, es posible que desee abordar el comentario de @Stefan Jansson también. – BoltClock

Respuesta

16

En mi caso (SUDZC con ARC para IOS), he reemplazado el siguiente código en el archivo SoapRequest.m;

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

con

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

De alguna manera la función correspondiente está buscando el elemento raíz con el nombre de "cuerpo". Después de inspeccionar el sobre de jabón, es fácil ver que el nombre del elemento raíz es "jabón: cuerpo".

+3

¡MUCHAS GRACIAS GRACIAS! Estuve atascado en este mismo problema durante dos días y esta fue la solución que necesitaba. –

+0

¡Muchas gracias! Me lo arregló – Mattias

+0

Gracias. Además, si este ilyasd no funciona, intente con '@" soapenv: Body "' en lugar de '@" soap: Body "'. – inket

0

En mi caso "env: Body" funcionó. Verifique su xml de retorno (imprimiendo) y reemplace apropiadamente

1

Mi webService fue creado en Java con Axis Eclipse.

para el arco que utilizo: "soapenv:Body"

Y en el archivo SoapObject.m agrego

#import "Soap.h" 
#import "SoapObject.h" 
0

En mi caso se trataba de un servicio web .Net (WCF) y tuve que usar s: cuerpo: encontrado a cabo por la impresión del documento CXML:

CXMLNode* test = [doc rootElement]; 
NSLog(@"%@",test); 

Aquí tengo esta:

<CXMLElement 0x68c1a50 [0x68c1b10] s:Envelope <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><**s:Body**><GetUserIDResponse xmlns="http://tempuri.org/"><GetUserIDResult>8</GetUserIDResult></GetUserIDResponse></s:Body></s:Envelope>> 

Gracias a los mensajes anteriores que era capaz de encontrar a cabo y publicado la respuesta completa de nuevo en mi blog: http://www.dailycode.info/Blog/post/2012/08/07/SUDZC-webservices-always-return-0-(WCF-web-service-and-IOS-client).aspx