0

我正在将数据写入事件内部的流:

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode

如下(取自苹果的文档):

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当输出流中没有其他内容要写入时,会调用该事件,因此会丢弃输出流。我怎样才能保持这个流打开写作?根据Apple 的文档,此事件被正确调用,因为没有任何内容写入输出流。有任何想法吗?

4

2 回答 2

1

你有没有把你的流放在一个运行循环中?请参阅此处的示例:http ://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server

于 2012-07-14T11:36:55.607 回答
0

文档在这一点上并不清楚,但一个合理的解释是NSStreamEventEndEncountered当你写到它的容量时,流会发送。(不清楚的部分是这是否适用于所有流或仅适用于您指定容量的流。例如,基于文件的流可以NSStreamEventEndEncountered在文件所在的卷已满时发送。)

鉴于“容量”的定义是您不能写入更多内容,因此保持流在该点之后保持打开是没有意义的。即使您有更多字节要写入,流也没有地方放置它们。

于 2012-07-14T07:33:33.953 回答