Поскольку RubyMotion, похоже, делает много преобразования типов во время компиляции, у меня возникли проблемы с передачей правильного типа данных в запрос NSMutableURLRequest POST. Он ожидает NSData, но я не могу понять, как ввести переменную NSString в NSData, не вызывая ошибки. Без typecasting наш SOAP-сервер не может должным образом получать данные, и я получаю страшный (и неопределенный) «Данные на корневом уровне недопустимы. Ошибка линии 1, позиция 1».RubyMotion >> Как добавить переменную как отдельный тип?
Это проблематично линия:
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)
Любая помощь будет оценена.
'(postXML as NSData)' должен быть просто 'postXML' без точки с запятой в конце, но в противном случае ваш код не будет вызывать никаких ошибок для меня, и если я проверю' request.HTTPBody', это ' Объект NSConcreteMutableData', а не 'NSString'. Какая конкретная часть вашего кода бросает ошибку? –
Насколько явные преобразования типов идут, кажется, RubyMotion обрабатывает все это для вас. Вызов метода NSData на качестве NSString эффективно типов его соответствующим образом: Перед loginPostXML = (loginPostXML как NSData) .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: истинный); После loginPostXML = loginPostXML.dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: true) Простое решение, но тип-неопределенность все еще остается (к сожалению). – cnp
'dataUsingEncoding' - это стандартный способ преобразования NSString в NSData. Вы говорите, что просто использование 'loginPostXML.dataUsingEncoding ...' делает или не исправляет его для вас? Если да, я могу добавить его в качестве официального ответа. –