当前位置:  开发笔记 > IOS > 正文

CFStreamCreatePairWithSocketToHost意外地与Swift崩溃

如何解决《CFStreamCreatePairWithSocketToHost意外地与Swift崩溃》经验,为你挑选了1个好方法。

最后在这里问我的第一个问题!

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

我正在写一个与我的Raspberry Pi通信的小应用程序.我有一些工作代码是用Obj-C(iOS 7)编写的,从教程中借用,它在Obj-C中都能正常工作(连接和行为与Pi一样).问题在于为Swift/iOS 9重写它(这是目标).

好一点:

func initNetworkCommunication() {
    var readStream: Unmanaged?
    var writeStream: Unmanaged?

    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()
}

我认为问题在于上面,因为这是堆栈中的最后一个方法调用,但是应用程序在很少信息的情况下悄悄地崩溃:

崩溃的屏幕

任何帮助将非常感激!
请随时询问更多信息.

ps我明白这个网站的格式是相当"严格",我错过了什么,过度等等,请让我知道:)



1> Knight Artor..:

我已经解决了.

首先:

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?
        var writeStream: Unmanaged?

        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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有