NSStreamEventEndEncountered

NSStreamEventEndEncountered

我创建了一个NSInputStream来从文件(IOS)加载内容:

NSString* fileName = [[NSBundle mainBundle] pathForResource:@"resource" ofType:@".dat"];
NSInputStream* dataStream = [NSInputStream inputStreamWithFileAtPath:fileName];
if (dataStream == nil) {
    NSLog(@"load asset failed");
    return;
}

[dataStream setDelegate:self];
[dataStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
                            forMode:NSDefaultRunLoopMode];
[dataStream open];

然后,添加事件处理程序:
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
    switch(eventCode) {
        case NSStreamEventEndEncountered: {
            [stream removeFromRunLoop:[NSRunLoop currentRunLoop]
                                       forMode:NSDefaultRunLoopMode];

            break;
        }
    }
}

我想捕获事件:NSStreamEventEndEncountered,但未发生。我只能捕获NSStreamEventOpenCompleted和NSStreamEventHasBytesAvailable。

哪里不对了?谢谢你的帮助!

最佳答案

您发布的代码看不到任何错误。确保在完成流后自己关闭流,而不是仅仅依靠获取NSStreamEventEndEncountered通知,您可以使用以下类似的方法简单地进行操作:

- (void) disconnect {
    // Close all open streams
    [inputStream close];
    [outputStream close];
}

如果连接被流的另一端关闭,通常只会得到NSStreamEventEndEncountered,这取决于您的操作可能无法控制。

关于objective-c - 从文件中读取内容时,NSInputStream不会发生NSStreamEventEndEncountered,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6437571/

10-09 07:03