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 に答える