gpt4 book ai didi

ios - CFStreamCreatePairWithSocketToHost 使用 Swift 意外崩溃

转载 作者:可可西里 更新时间:2023-11-01 00:11:57 25 4
gpt4 key购买 nike

终于可以在这里问我的第一个问题了!

预先:Xcode 7.1.1、OS 10.11.2、iOS 9.0.2(在物理设备上)

我正在编写一个与我的 Raspberry Pi 通信的小应用程序。我有一些从 tutorial 借来的用 Obj-C(适用于 iOS 7)编写的工作代码,它在 Obj-C 中对我来说一切正常(与 Pi 的连接和行为符合预期)。问题在于为 Swift/iOS 9 重写它(这是目标)。

优点:

func initNetworkCommunication() {
var readStream: Unmanaged<CFReadStreamRef>?
var writeStream: Unmanaged<CFWriteStreamRef>?

CFStreamCreatePairWithSocketToHost(nil, "192.168.1.22", 777, &readStream, &writeStream)

inputStream = readStream?.takeRetainedValue() as! NSInputStream
outputStream = writeStream?.takeRetainedValue() as! NSOutputStream

inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

inputStream.open()
outputStream.open()
}

我认为问题出在上面,因为这是堆栈中的最后一个方法调用,但是应用程序在几乎没有信息的情况下安静地崩溃了:

Crash Screen

如有任何帮助,我们将不胜感激!
请随时询问更多信息。

附注我知道本网站的格式相当“严格”,如有任何遗漏、过分等问题,请告诉我 :)

最佳答案

我已经解决了。

首先:

inputStream = readStream?.takeRetainedValue() as! NSInputStream
outputStream = writeStream?.takeRetainedValue() as! NSOutputStream

应该是:

inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()

其次,我将连接从 ViewController(我最初拥有此方法的地方)抽象到一个名为 Connection 的新类。

这里是连接:

import UIKit

class Connection: NSObject, NSStreamDelegate {
var inputStream: NSInputStream!
var outputStream: NSOutputStream!

func connect() {
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?

CFStreamCreatePairWithSocketToHost(nil, "192.168.1.22", 777, &readStream, &writeStream)

self.inputStream = readStream!.takeRetainedValue()
self.outputStream = writeStream!.takeRetainedValue()

self.inputStream.delegate = self
self.outputStream.delegate = self

self.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
self.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

self.inputStream.open()
self.outputStream.open()
}
}

我经常发现开始输入这些可以帮助我:p

关于ios - CFStreamCreatePairWithSocketToHost 使用 Swift 意外崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443045/

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