나는 이벤트 내부 스트림에 데이터를 쓰고 다음어떻게 Objective-C에서 출력 스트림을 열어 둘 수 있습니까?
- (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's documentation에 따르면 출력 스트림에 아무 것도 기록되지 않기 때문에이 이벤트가 올바르게 호출됩니다. 어떤 아이디어?
Workshed의 예제는 훌륭하고 현재 다음과 같습니다.하지만 NSStreamEventEndEncountered는 case 문에서 결코 잡히지 않는다는 버그가 있습니다. 그러나 NSStreamEventEndEncountered를 typedef가 4로 바꾼다면 잡히고 샘플이 작동을 멈 춥니 다. Ceasar의이 예제는 훌륭하지만 handleEvent 메소드에 버그가 두 개있는 것으로 보입니다. 어느 쪽이든 고정 시키면 샘플이 깨집니다. –