我正在将数据写入事件内的流:
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
如下(取自Apple的文档):
case NSStreamEventHasSpaceAvailable:
uint8_t *readBytes = (uint8_t *)[self.outData mutableBytes];
readBytes += byteIndex;
int dataLength = [self.outData length];
unsigned int length = ((dataLength - byteIndex >= 1024) ? 1024 : (dataLength - byteIndex));
uint8_t buffer[length];
(void)memcpy(buffer, readBytes, length);
length = [self.outputStream write:(const uint8_t *)buffer maxLength:length];
byteIndex += length;
break;
但是,当在输出流中没有其他内容写入时,将调用事件NSStreamEventEndEncountered
,因此将丢弃输出流。我如何保持这个流开放写作?根据{{3}},正确调用此事件,因为没有任何内容写入输出流。有什么想法吗?
答案 0 :(得分:1)
你有没有把你的流放入runloop? 请参阅此处的示例:http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server
答案 1 :(得分:0)
关于这一点,文档并不清楚,但合理的解释是当您写完容量时,流将发送NSStreamEventEndEncountered
。 (不清楚的部分是所有流是否都是如此,或者只有那些where you specify a capacity。例如,基于文件的流可以在文件所在的卷已满时发送NSStreamEventEndEncountered
。)< / p>
鉴于“容量”的定义是你不能写得那么多,保持流程在这一点上打开是没有意义的。即使你有更多的字节要写,流也没有地方可以放置它们。