最后在这里问我的第一个问题!
预先: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我明白这个网站的格式是相当"严格",我错过了什么,过度等等,请让我知道:)
我已经解决了.
首先:
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