2

由于 RubyMotion 似乎在编译时进行了大量类型转换,因此我无法将正确的 dataType 传递给 NSMutableURLRequest POST 请求。它期待 NSData,但我不知道如何在不引发错误的情况下向 NSData 键入 NSString 变量。如果不进行类型转换,我们的 SOAP 服务器将无法正确接收数据,并且我得到可怕的(且模糊的)“根级别的数据无效。第 1 行,位置 1”错误。

这是有问题的行:

postXML = "<xml><whatever>hey</whatever></xml>"
postData = ( postXML as NSData ).dataUsingEncoding( NSUTF8StringEncoding, allowLossyConversion: true );

request = NSMutableURLRequest.alloc.init
request.setURL( NSURL.URLWithString( "https://services.sbx1.cdops.net/v4.3/SubscriberServicePox.svc/Login" ) )
request.setHTTPMethod( "POST" )

request.setValue( "application/xml", forHTTPHeaderField: "Content-Type" )
request.setHTTPBody( postData, dataUsingEncoding:NSUTF8StringEncoding )

theConnection = NSURLConnection.alloc.initWithRequest( request, delegate:self )

任何帮助,将不胜感激。

4

1 回答 1

2

您对正在发生的事情的理解有一些漏洞,所以让我们分解一下。

postXML = "<xml><whatever>hey</whatever></xml>"
postData = ( postXML as NSData ).dataUsingEncoding( NSUTF8StringEncoding, allowLossyConversion: true );

我不确定你从哪里得到( postXML as NSData )的,但它无效并且没有意义。是在NSString notdataUsingEncoding:allowLossyConversion:上声明的 Objective-C 方法。正确的调用方式是这样的NSData

postData = postXML.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

Ruby 运动不type conversions适合你,Ruby 不适合,Objective-C 也不适合。如果您向一个类的实例发送一条消息,该实例不响应您发送的消息,您将崩溃/引发异常。

你打电话时

postXML.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

您没有进行类型转换,而是将消息发送dataUsingEncoding:allowLossyConversion:NSString. 这将导致返回一个全新的全新对象( 的实例NSData)。

于 2012-05-23T21:10:48.817 回答