繁体   English   中英

在视图之间快速传递NSInpuStream和outputStream

[英]passing NSInpuStream and outputStream between views in swift

我有2个视图都需要一个NSInputStream和一个NSOutputStream变量,我的问题是我如何才能从第二个中的第一个获取输入流/输出流。

第一个ViewController

class ViewController: UIViewController,NSStreamDelegate{
 var inputStream : NSInputStream!
 var outputStrean : NSOutputStream!
 override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.initNetworkCommunication()

 } 

 func initNetworkCommunication() {
 //here i init the both of them
 }

}

现在,第二个服务器应该使用相同的东西,而不必再次在服务器中重新连接[执行相同的initNetworkCommunication]。

class ViewController2: UIViewController,NSStreamDelegate {
 var inputStream : NSInputStream!
 var outputStrean : NSOutputStream!

 override func viewDidLoad() {
    super.viewDidLoad()
    inputStream = ???
    outputStrean =???
 }
}

我尝试使用吸气剂,但由于某些原因,我在函数调用中得到了一个额外的参数

更新:仔细查看后,我仍然面临这个问题。因为我使用的是我发起的读取和写入流

CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,"localhost",8023,&readStream,&writeStream)
   inputStream = self.readStream!.takeUnretainedValue()
    outputStrean = self.writeStream!.takeUnretainedValue()

在遵循一个建议并从第一个viewController中的一个读取流启动读取流后,我得到一个错误,它们为空。问题是我想避免单个用户到服务器的多个连接,目前这是唯一的它的工作方式

尝试这个。

您可以通过编写协议或将数据传递给ViewController类对象来获取它。

因此,让我们看看如何将数据传递给对象。

class ViewController1: UIViewController {

 override func viewDidLoad() {
    super.viewDidLoad()

 }

  func getViewController(storyBoard: NSString) -> UIViewController
    {
        var mystoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        var ViewControllerID : UIViewController = mystoryBoard.instantiateViewControllerWithIdentifier(storyBoard) as UIViewController
        return ViewControllerID
    }

func buttonClickedFunction()
{
 var viewController2Object : ViewController2 = getViewController("ViewController2StoryBoardName") as ViewController2
viewController2Object.inputStream = "" // give the value which you want to pass to the ViewController2
viewController2Object.outputStream = ""//  give the value which you want to pass to the ViewController2
  self.presentViewController(viewController2Object, animated: true, completion: nil)
}
}




class ViewController2: UIViewController {

 var inputStream : NSInputStream!
 var outputStrean : NSOutputStream!

 override func viewDidLoad() {
    super.viewDidLoad()
     inputStream // use this values in code
    outputStream // use this values in code
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM