Обработка потоковых ошибок

Иногда, и особенно с сокетами, потоки могут столкнуться с ошибками, предотвращающими последующую обработку потоковых данных. Обычно ошибки указывают отсутствие чего-то в одном конце потока, такого как катастрофический отказ удаленного узла или удаление передаваемого потоком файла. Существует немного, который может сделать клиент потока, когда большинство ошибок происходит кроме отчета ошибка пользователю. Несмотря на то, что потоковый объект, сообщивший об ошибке, может быть запрошен для состояния, прежде чем это будет закрыто, это не может быть снова использовано для операций чтения или операций записи.

NSStream и NSOutputStream если ошибка произошла несколькими способами, классы сообщают Вам:

Как только Вы решили, что потоковый объект столкнулся с ошибкой, можно запросить объект с a streamError сообщение для получения большей информации об ошибке (в форме NSError объект). Затем, сообщите пользователю об ошибке. Перечисление 1 показывает, как делегат выполнения запланированный на цикл потоковый объект мог бы обработать ошибку.

Перечисление 1  , Обрабатывающее потоковые ошибки

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
    NSLog(@"stream:handleEvent: is invoked...");
 
    switch(eventCode) {
        case NSStreamEventErrorOccurred:
        {
            NSError *theError = [stream streamError];
            NSAlert *theAlert = [[NSAlert alloc] init];
            [theAlert setMessageText:@"Error reading stream!"];
            [theAlert setInformativeText:[NSString stringWithFormat:@"Error %i: %@",
                [theError code], [theError localizedDescription]]];
            [theAlert addButtonWithTitle:@"OK"];
            [theAlert beginSheetModalForWindow:[NSApp mainWindow]
                modalDelegate:self
                didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
                contextInfo:nil];
            [stream close];
            [stream release];
            break;
        }
        // continued ....
    }
}