gpt4 book ai didi

macos - 不调用委托(delegate)函数 - NSURLConnection

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:20 25 4
gpt4 key购买 nike

我是 swift 编码的新手,所以我的大部分代码都是“这是我在互联网上找到的”状态。

我正在尝试发送一个 HTTP GET 请求,然后使用它。为此,我正在使用 NSURLConnection。我的 Xcode 项目中有 2 个 swift 文件(这是一个 swift 控制台项目,而不是 Playground ),一个是主要文件,第二个包含我想用于委托(delegate)的类:

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)

当我在委托(delegate)函数中的每个 println 上设置断点时,它们永远不会被命中。根据 NSLog 输出从主线程完成执行。

在调试器中,我可以看到数据是通过网络发送和接收的,但我从未得到任何输出。我在这里看到了很多类似的问题,但没有任何帮助。

我做错了什么?

最佳答案

正如 Martin R 所建议的那样,我在启动 NSURLConnection 后立即将正确的 NSRunLoop 添加到我的代码中:

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

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

shouldKeepRunning 是在我的类中定义的 bool 变量,它在委托(delegate)函数 connectionDidFinishLoading 中设置为 false,所以

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com