使用sendAsynchronousRequest completionBlock进行NSOperation

时间:2015-05-18 19:03:25

标签: ios swift nsoperation

我有一个NSOperation子类,其中包含以下main函数:

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"
            }
        }
    }
}

我的操作状态为finishedNSURLConnection.sendAsynchronousRequest的完成处理程序实际上已被破坏。如何使NSOperation等到NSURLConnection.sendAsynchronousRequest的完成处理程序触发?

1 个答案:

答案 0 :(得分:0)

您应该覆盖start而不是main。您必须手动触发isExecutingisFinished的通知。 Documentation here

相关问题