我是 swift 和 iOS 的新手,请记住这一点。
打开 CFReadStream 时出现此错误。不管我是打开读流还是写流,应用程序总是失败。
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
let host: CFString = NSString(string: hostIP)
let port: UInt32 = UInt32(self.VNCport)
self.password = password
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &readStream, &writeStream)
inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()
if readStream == nil {
print("Erro read")
}
if writeStream == nil {
print("Erro write")
}
inputStream!.delegate = self
outputStream!.delegate = self
inputStream!.schedule(in: RunLoop.main, forMode: RunLoop.Mode.default)
outputStream!.schedule(in: RunLoop.main, forMode: RunLoop.Mode.default)
inputStream!.open()
outputStream!.open()
Run Code Online (Sandbox Code Playgroud)
我只用这个函数和一个按钮做了一个干净的项目,结果是一样的。项目中没有使用 quic lib。
有人可以帮忙吗?
我在不同的上下文中也遇到了同样的错误,在 XCode 12.0.1 中也是如此。它可能不相关,但我怀疑它与访问主线程的运行循环有关。我只是尝试了一些我在网上找到的介绍性代码,并遇到了同样的问题,所以这是一个错误,而不是您的代码的问题。以下是如何获得一段具有相同问题的代码:
git clone git@github.com:BestKora/CS193P-Fall-2017-Demo-iOS12.git
cd "CS193P-Fall-2017-Demo-iOS12/Cassini L10"
xed . # this opens XCode (CLI tool stands for XCode editor)
Run Code Online (Sandbox Code Playgroud)
话虽如此,通过重写代码,我能够防止这个问题。也许您可以在下面的代码中找到一些东西来解决您的特定问题:
具体来说,而不是使用以下 ( DispatchQueue.global)
private func fetchImage() {
if let url = imageURL {
spinner.startAnimating()
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
let urlContents = try? Data(contentsOf: url)
DispatchQueue.main.async {
if let imageData = urlContents, url == self?.imageURL {
self?.image = UIImage(data: imageData)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用URLSession.shared.dataTask,并且不再发生此错误:
private func fetchImage() {
print("fetching image")
if let url = imageURL {
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else {
return
}
// maybe try dispatch to main
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
}
}
task.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
我在小部件目标中遇到了同样的问题,但通过向变量添加“public”来解决它。
固定结构如下所示。
struct LastCommitEntry: TimelineEntry {
public let date: Date
public let commit: Commit
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37886 次 |
| 最近记录: |