【问题标题】:Messages are coming up blank?消息是空白的?
【发布时间】:2015-12-16 04:38:09
【问题描述】:

我有一些代码从文本框中获取文本并通过 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)
}
}

按下按钮时电子邮件会通过,但电子邮件中没有任何内容,只是空白。是的,文本字段中有文本。你能看出我哪里出错了吗?

任何帮助表示赞赏, 谢谢。

【问题讨论】:

  • 我不知道它是否会有所帮助,因为我觉得即使它是可选的,文本仍然会被发送,但请尝试在文本框中展开文本,因为这在技术上是一个可选属性跨度>

标签: ios swift email post message


【解决方案1】:

您的文字可能无法显示的原因有多种:

--> 你的故事板和你的 ViewController 之间的映射不知何故被切断了。尝试重新连接它们。

--> 你可以尝试专门使用“self”

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

【讨论】:

    【解决方案2】:

    编辑: 试试这样的

        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)\r\n")
    
        let endBound = "\r\n--\(boundary)\r\n"
        let codeInfo = "Content-Disposition: form-data; name=\"code\"\r\n\r\n\(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”不为零

    如果它为 nil 或为空,这可能意味着故事板的 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")
    

    【讨论】:

    • 当我按下按钮时,控制台中出现以下内容: 4,API 响应:Optional(),文本(这是我放入文本框中的内容)。 4 是 requestBodyData 编号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多