2016-09-27 85 views
0

所有工作都按預期方式一步一步地引發調試器,否則我得到EXC_BAD_ACCESS。我想我需要某個地方的延遲或等待(更可取的)。NSStreams代碼在調試器模式下按預期工作

// 1) Create streams(input/output) 
Stream.getStreamsToHost(withName: _host, port: _port, inputStream: &self._input_stream, outputStream: &self._output_stream); 
if (self._input_stream == nil || self._output_stream == nil) { 
    self._promise.reject(HTTPSocketStreamError()); 
    return self._promise; 
} 
// 2) Delegate to self 
self._input_stream!.delegate = self; 
self._output_stream!.delegate = self; 

// 3) Set dispatch queues 
CFReadStreamSetDispatchQueue(_input_stream, DispatchQueue(label: "xyz.httpsocket", attributes: [])); 
CFWriteStreamSetDispatchQueue(_output_stream, DispatchQueue(label: "xyz.httpsocket", attributes: [])); 

// 4) Open streams(input/output) 
if(!CFReadStreamOpen(_input_stream)) { 
    close(nil); 
    self._promise.reject(HTTPSocketStreamError()); 
    return self._promise; 
} 

if(!CFWriteStreamOpen(_output_stream)) { 
    close(nil); 
    self._promise.reject(HTTPSocketStreamError()); 
    return self._promise; 
} 

let request: CFHTTPMessage = CFHTTPMessageCreateRequest(kCFAllocatorDefault, "GET" as CFString, _url as CFURL, kCFHTTPVersion1_1).takeRetainedValue(); 
self.request(message: request); 

if let http_message = CFHTTPMessageCopySerializedMessage(request) { 
    let data: Data = http_message.takeRetainedValue() as Data; 
    // need some pause here 
    let length = data.withUnsafeBytes{ 
     // 5) Write to output stream 
     _output_stream!.write($0, maxLength: data.count) 
    } 

    if (length != 0) { 
     return self._promise; 
    } 
} 

回答

0

被遺忘的「自我」。

if let http_message = CFHTTPMessageCopySerializedMessage(request) { 
    let data: Data = http_message.takeRetainedValue() as Data; 
    // need some pause here 
    let length = data.withUnsafeBytes{ 
     // 5) Write to output stream 
     self._output_stream!.write($0, maxLength: data.count) 
    } 
相關問題