2011-12-27 28 views
10

Tôi đã cố gắng để có được một dịch vụ web làm việc bằng cách sử dụng Sudzc. Bất cứ khi nào tôi chuyển đổi WSDL của tôi để obj-c mà không có tham chiếu tự động đếm nó hoạt động tốt. Vấn đề là, chúng tôi đang xây dựng tất cả các ứng dụng của mình trong iOS 5 ngay bây giờ và tất cả các mã của chúng tôi đều sử dụng ARC. Sudzc bây giờ cũng cho phép bạn tạo một bó với ARC được kích hoạt nhưng khi tôi chạy mã này nó luôn trả về null.Sudzc với iOS 5 và ARC

Tôi đã thử gỡ lỗi mã Sudzc và nó nhận được phản hồi xml đúng từ dịch vụ. Một nơi nào đó bị mất trong bản dịch. Tôi đã thử chuyển đổi mã Sudzc đang hoạt động mà không có ARC thành mã với ARC được kích hoạt nhưng ngay sau khi tôi đã sửa tất cả các lỗi, nó trả về null một lần nữa.

Có ai gặp phải điều này và biết điều gì đang xảy ra không? Sẽ tiết kiệm cho tôi vô số thời gian không phải tự mình gỡ lỗi toàn bộ mã Sudzc.

+0

Như mọi khi 12 phút sau khi tìm thấy sự can đảm để viết một câu hỏi tôi thấy giải pháp. Gắn cờ các lớp Sudzc với -no-objc-arc và bây giờ tôi có thể sử dụng mã làm việc cũ. Là một người dùng khá mới của obj-c Tôi không biết rằng tồn tại .. – Twan

+0

Tôi đang gặp vấn đề tương tự và có lẽ là người dùng mới hơn bạn :) Tôi thành thật không biết ý bạn là gì khi gắn cờ với -no -objc-arc, bạn có thể giải thích điều này? –

+0

Hãy xem xét việc đăng bài như một câu trả lời và đánh dấu nó được chấp nhận để câu hỏi này sẽ được xem xét giải quyết. Trong khi bạn đang ở đó, bạn có thể muốn giải thích bình luận của @Stefan Jansson. – BoltClock

Trả lời

16

Trong trường hợp của tôi (SUDZC với ARC cho IOS), tôi đã thay thế mã folowing trong tệp SoapRequest.m;

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

với

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

Bằng cách nào đó các chức năng tương ứng đang tìm kiếm phần tử gốc với tên "Body". Sau khi kiểm tra phong bì xà phòng, rất dễ thấy tên của phần tử gốc là "soap: Body".

+3

CẢM ƠN BẠN CẢM ƠN BẠN CẢM ƠN! Tôi đã bị mắc kẹt trên cùng một vấn đề này trong hai ngày và đây là sửa chữa tôi cần thiết. –

+0

Cảm ơn bạn rất nhiều! Sửa lỗi cho tôi – Mattias

+0

Cảm ơn. Ngoài ra, nếu ilyasd này không hoạt động, hãy thử '@" soapenv: Body "' thay vì '@" soap: Body "'. – inket

0

Trong trường hợp "env: Body" của tôi hoạt động. Kiểm tra lại xml của bạn (bằng cách in) và thay thế một cách thích hợp

1

WebService của tôi được tạo bằng Java với Axis Eclipse.

CHO ARC tôi sử dụng: "soapenv:Body"

Và trong file SoapObject.m tôi thêm

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

Trong trường hợp của tôi đó là một dịch vụ web Net (WCF) và tôi đã phải sử dụng s: Body: Phát hiện ra bằng cách in tài liệu cxml:

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

Ở đây tôi nhận điều này:

<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>> 

Nhờ bài viết trước tôi đã có thể tìm thấy nó ra và đăng câu trả lời hoàn chỉnh một lần nữa trên blog của tôi: http://www.dailycode.info/Blog/post/2012/08/07/SUDZC-webservices-always-return-0-(WCF-web-service-and-IOS-client).aspx

Các vấn đề liên quan