RubyMotion>>如何将变量转换为特定类型?

时间:2012-05-23 19:37:42

标签: ios types casting nsmutableurlrequest rubymotion

由于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 )

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

Ruby动作不会为你做type conversions,Ruby则不行,而Objective-C则不行。{如果您将消息发送到不响应您发送的消息的类实例,则会崩溃/引发异常。

致电时

postXML.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

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