- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
终于可以在这里问我的第一个问题了!
预先: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()
}
我认为问题出在上面,因为这是堆栈中的最后一个方法调用,但是应用程序在几乎没有信息的情况下安静地崩溃了:
如有任何帮助,我们将不胜感激!
请随时询问更多信息。
附注我知道本网站的格式相当“严格”,如有任何遗漏、过分等问题,请告诉我 :)
最佳答案
我已经解决了。
首先:
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/
我是 iOS/MacOS 编程的新手,还没有找到任何我能理解的例子。我想只需几行代码就可以做到这一点,很抱歉,如果这已经涵盖了,但我无法找到它。 我正在使用 CFStreamCreatePairWit
我正在尝试通过 TCP 将 iOS 设备连接到服务器。我目前正在使用函数 CFStreamCreatePairWithSocketToHost。我的问题是我想设置 iOS 设备需要使用的本地端口。有没
有人可以告诉我 CFStreamCreatePairWithSocketToCFHost 和 CFStreamCreatePairWithSocketToHost 调用之间的区别吗? 还有什么是 CF
用例 我正在使用套接字通过 CFStreamCreatePairWithSocketToHost() 发送和接收数据,并且我试图了解在发送多个集数据时如何完成此操作(即不只是 1 个请求)。 问题 目
我正在使用 CFStreamCreatePairWithSocketToHost 创建一个套接字 tcp 连接来获取写入流(我不想准备任何数据): CFStreamCreatePairWithSock
我使用 NSInputstream 和 NSOutputstream 来建立连接并发送数据。我的流对象具有打开和关闭流的功能。我使用以下代码: @interface Stream() { NS
我正在尝试与我的服务器建立 TLS 连接,但在 CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, str, 5555, &readStre
我注意到在我的程序中使用 CFStreamCreatePairWithSocketToHost 时出现随机 EXC_BADACCESS 错误,但仅限于 ios6 - 当使用 ios5 模拟器时(即使在
终于可以在这里问我的第一个问题了! 预先:Xcode 7.1.1、OS 10.11.2、iOS 9.0.2(在物理设备上) 我正在编写一个与我的 Raspberry Pi 通信的小应用程序。我有一些从
我面临使用 CFStreamCreatePairWithSocketToHost 创建与 iPV6 的套接字连接的问题。但是我能够为相同的端口号创建与 IPV4 的套接字连接。 尝试了所有场景,例如添
我是 swift 编程的新手。我正在尝试从我的 ios 应用程序连接到服务器套接字。我有一个 View Controller ,在一个按钮操作中,我调用了连接到套接字服务器的函数 let socket
CFStream 类是否符合 IPV6 标准?我正在使用 CFStreamCreatePairWithSocketToHost 连接到套接字而不是低级套接字 api CFStreamCreatePai
我是一名优秀的程序员,十分优秀!