現象
通信時にNSStreamEvent.ErrorOccurred が発生して
ErrorOccurred: Optional("Error Domain=NSPOSIXErrorDomain Code=12 \"Cannot allocate memory\"")
というメッセージが表示される1 2 3 4 5 6 7 8 9 10 | /** ストリームの状態が変化した時に呼ばれる */ func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) { switch eventCode { case NSStreamEvent.ErrorOccurred: // ここ print( "input: ErrorOccurred: \(aStream.streamError?.description)" ) // case XXXX } } |
対処法
今回のケースはNSStream.removeFromRunLoop を読んでいなかったのが直接の原因でした
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // 接続処理 func connect() { var readStream : Unmanaged<CFReadStream>? var writeStream : Unmanaged<CFWriteStream>? // ソケット作成 CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, Settings.serverAddress(), serverPort, &readStream, &writeStream) // すでに接続済みの場合は一旦解除する if ( inputStream != nil ) { inputStream.delegate = nil inputStream.close() // 以下が抜けていた inputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) } inputStream = readStream!.takeRetainedValue() as NSInputStream inputStream.delegate = self inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) inputStream.open() } |