什么时候应该在NSStream上调用NSXMLParser.parse()?

时间:2014-11-12 01:19:29

标签: ios swift xmpp nsstream

我有一个NSXMLParser对象。我正在运行XMPP流。

每次收到邮件或只收到一次邮件时,是否需要调用.parse()

这是NSStream中相关代码的解析:

func connectToSocket(host: String, port: Int) {

    NSStream.getStreamsToHostWithName(host, port: port, inputStream: &(self.input), outputStream: &(self.output))

    self.input!.delegate  = self
    self.output!.delegate = self



    //self.input!.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
    //self.output!.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
    self.input!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    self.output!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

    self.input!.open()
    self.output!.open()

    parser = NSXMLParser(stream: input!)
    parser!.delegate = self
}

1 个答案:

答案 0 :(得分:0)

.parse()是一个同步操作,因此它将一直阻塞,直到它解析了整个流。您必须从另一个线程(或调度队列)调用解析,或者在另一个runloop中调度输入流。

有关如何为解析器创建调度队列的信息,请参阅here;有关如何使用来自不同队列的输入流,请参阅here