I have a NSOperation
subclass with the following main
function:
override func main() {
if self.cancelled {
return
}
var stringResponse: String!
var urlString: String!
if self.arduinoConnection.arduinoHTTPPort == 80 {
urlString = String(format: "http://%@/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
} else {
urlString = String(format: "http://%@:%i/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.arduinoHTTPPort, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
}
let url = NSURL(string: urlString)
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
if (stringResponse == "") {
self.arduinoConnection.state = .Failed
self.arduinoConnection.switchState = false
self.arduinoConnection.statusText = "Failed To Connect"
} else {
self.arduinoConnection.state = .Downloaded
if (stringResponse == "0") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = false
self.arduinoConnection.statusText = "Connected"
} else if (stringResponse == "1") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = true
self.arduinoConnection.statusText = "Connected"
}
}
}
}
My operation's state is finished
before NSURLConnection.sendAsynchronousRequest
's completion handler is actually ruined. How to make NSOperation
wait until the completion handler of NSURLConnection.sendAsynchronousRequest
fires?