我对swift编码还不熟悉,所以我的大部分代码都是“这就是我在网上找到它的方式”状态。
我正在尝试发送一个http get请求,然后处理它。我用的是NSURLConnection。我的xcode项目中有两个swift文件(它是一个swift控制台项目,而不是操场),一个是主文件,第二个包含我要用于委派的类:

import Foundation

class Remote: NSObject, NSURLConnectionDelegate {

    var data = NSMutableData()

    func connect() {
        var url =  NSURL(string: "https://www.google.com")
        var request = NSURLRequest(URL: url!)

        NSLog("Is%@ main thread", NSThread.isMainThread() ? "" : " NOT");
        var conn = NSURLConnection(request: request, delegate: self, startImmediately: false)
        conn?.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
        conn?.start()

        sleep(2)
    }


    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
        println("didReceiveResponse")
    }

    func connection(connection: NSURLConnection!, didReceiveData conData: NSData!) {
        println("didReceiveData")
    }

    func connectionDidFinishLoading(connection: NSURLConnection!) {
        println("DidFinishLoading")
    }

    deinit {
        println("deiniting")
    }

}

这是我的主要SWIFT代码:
import Foundation

var xxx = Remote()
xxx.connect()

sleep(10)

sleep(2)

当我在委托函数中的每个println上设置断点时,它们永远不会被命中。根据NSLog输出从主线程执行。
在调试器中,我可以看到数据是通过网络发送和接收的,但我从来没有得到任何输出。我在这里看到过很多类似的问题,但没有任何帮助。
我做错什么了?

最佳答案

正如martin r建议的那样,我在启动nsurlconnection之后立即在代码中添加了正确的nsrunlop:

self.shouldKeepRunning = true
let theRL = NSRunLoop.currentRunLoop()

while self.shouldKeepRunning && theRL.runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeInterval: 1.0, sinceDate: NSDate())) { }

shouldkeeprunning是在我的类中定义的bool变量,在委托函数connectiondifinishloading中设置为false,所以

关于macos - 委托(delegate)函数未调用-NSURLConnection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32614914/

10-13 07:30