I have a NSXMLParser object. I'm running an XMPP stream.
Does .parse()
need to be called each time I receive a message or just once?
Here's a parse of relevant code in the 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
}
.parse()
is a synchronous operation, so it will block until it has parsed the entire stream. You'll have to call parse from a different thread (or dispatch queue), or schedule the input stream in a different runloop.See here for how to create a dispatch queue for the parser, and here for how to use the input stream from a different queue.