我有一些代码,它从文本框中提取文本,并通过POST消息将其发送到服务器,然后服务器将其发送至电子邮件地址。
class ViewController: UIViewController {
@IBOutlet weak var emailText: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func sendEmail() {
let url = NSURL(string:"http://www.fakewebsite.com/email.php")
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 2.0)
request.HTTPMethod = "POST"
// set Content-Type in HTTP header
let boundaryConstant = "----------V2ymHFg03esomerandomstuffhbqgZCaKO6jy";
let contentType = "multipart/form-data; boundary=" + boundaryConstant
NSURLProtocol.setProperty(contentType, forKey: "Content-Type", inRequest: request)
// set data
var dataString = emailText.text
let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = requestBodyData
// set content length
//NSURLProtocol.setProperty(requestBodyData.length, forKey: "Content-Length", inRequest: request)
var response: NSURLResponse? = nil
var error: NSError? = nil
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error)
let results = NSString(data:reply!, encoding:NSUTF8StringEncoding)
println("API Response: (results)")
}
@IBAction func sendButton(sender: AnyObject) {
sendEmail()
println(emailText.text)
}
}
当按下按钮时,电子邮件就会通过,但电子邮件中什么都没有,只是一片空白。是的,文本字段中有文本。你能看出我哪里出了问题吗?
感谢任何帮助,谢谢
您的文本可能无法出现的原因有多种:
-->故事板和ViewController之间的映射在某种程度上被切断了。尝试重新连接它们。
-->你可以尝试并专门使用"自我"
var dataString = self.emailText.text;
-->您可以使用NSData提供的以下初始值设定项:
NSData(base64String:String, options:NSDataBase64DecodingOptions)
-->放置调试点或编写一个简单的打印语句,显示当前数据的长度:
let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
//if this print says length is 0 then you dont seem to a valid link between the storyboard and the ViewController
print(requestBodyData.length)
request.HTTPBody = requestBodyData
编辑:试试这个
let postRequest = NSMutableURLRequest(URL: NSURL(string: "")!)
let postBody = NSMutableData()
postRequest.HTTPMethod = "POST"
// Boundary & Charset
let boundary = "blahblahblah"
let charset = "utf-8"
let contentType = "multipart/form-data; charset=(charset); boundary=(boundary)"
postRequest.addValue(contentType, forHTTPHeaderField: "Content-Type")
let stringData = NSMutableString()
stringData.appendFormat("--(boundary)rn")
let endBound = "rn--(boundary)rn"
let codeInfo = "Content-Disposition: form-data; name="code"rnrn(code!)"
stringData.appendString(codeInfo)
stringData.appendString(endBound)
postBody.appendData(stringData.dataUsingEncoding(NSUTF8StringEncoding)!)
postRequest.HTTPBody = postBody
let operationQueue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(postRequest, queue: operationQueue) { (response, data, error) -> Void in
if data != nil {
let resp = String(data: data!, encoding: NSUTF8StringEncoding)
print("Response -> (resp)")
}
}
//-----
试着调试代码,看看"dataString"中是否真的有文本。还要确保"requestBodyData"不是零
如果它为零或为空,这可能意味着你故事板的emailText与代码"@IBOutlet"没有正确连接
// set data
var dataString = emailText.text
let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
或者可以像这个一样进行检查
let contentType = "multipart/form-data; charset=utf-8; boundary=(boundary)"
request.addValue(contentType, forHTTPHeaderField: "Content-Type")