midori
midori

Reputation: 450

Convert NSMutableData to NSString in Swift

Currently, I am playing around with Swift.

I wanted to do a small downloader app with NSURLConnection. So far everything works fine, but I have 2 questions.

  1. Why am I not able to convert my response data to NSString?
  2. How can I convert my websever NSURLResponse to NSHTTPURLResponse?

So far my code looks like this:

import Foundation

class Downloader: NSObject, NSURLConnectionDelegate {

    let urlString: String
    var responseData: NSMutableData = NSMutableData()
    var responseMessage: NSURLResponse = NSURLResponse()

    init(urlString: String) {
        self.urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
    }

    func startDownloaderWithUrl() {
        let url: NSURL = NSURL.URLWithString(self.urlString);
        let r: NSURLRequest = NSURLRequest(URL: url);
        let connection:NSURLConnection = NSURLConnection(
            request: r,
            delegate: self,
            startImmediately: true);
    }

    func connection(connection: NSURLConnection!, didFailWithError error: NSError!) {
        NSLog("Connection failed.\(error.localizedDescription)")
    }

    func connection(connection: NSURLConnection, didRecieveResponse response: NSURLResponse)  {
        NSLog("Recieved response")
        self.responseMessage = response;
    }

    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
        self.responseData = NSMutableData()
    }

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
        self.responseData.appendData(data)
    }

    func connectionDidFinishLoading(connection: NSURLConnection!) {
        let responseString: NSString = NSString(data: self.responseData, encoding: NSUTF8StringEncoding);

        NSLog("%@", "Finished Loading");
        //NSLog("%@", self.responseData);
        NSLog("%@", responseString);
    }
 }

My responseString is always nil although my responseData has a significant amount of bytes. Second how can I convert my response message to NSHTTPURLResponse?

Upvotes: 1

Views: 9530

Answers (3)

Stas
Stas

Reputation: 31

try tis

func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
    self.data = NSMutableData()
}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
    self.data.appendData(data)
}

func connectionDidFinishLoading(connection: NSURLConnection!) {
    var dta = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("the string is: \(dta)")

    }

Upvotes: 3

midori
midori

Reputation: 450

Changing the encoding to ASCII worked for me.

Upvotes: 0

Kirit Modi
Kirit Modi

Reputation: 23407

Convert NSMutableData To String

var YourSting = NSString(data responseData: NSData!, encoding encoding: UInt)

Upvotes: 0

Related Questions