ios - NSOutputStream не записывает данные - PullRequest
0 голосов
/ 06 июля 2018

Я загружаю файл и записываю его байты в NSOutputStream:

 self.outputFileStream = [NSOutputStream outputStreamToFileAtPath:downloadFilePath 
 append:NO];    
 [self.outputFileStream setDelegate:self];

Затем в didReceiveResponse обратном вызове NSURLSession:

[self.outputFileStream open];

И после получения первых байтов:

const uint8_t *bytes = (const uint8_t*)[data bytes];       
NSInteger bytesLeft = [data length];
NSInteger bytesWritten = -1;
do {
   bytesWritten = [self.outputFileStream write:bytes maxLength:bytesLeft];
   if (bytesWritten == -1) {
       break;
   }
   bytesLeft -= bytesWritten;
} while (bytesLeft > 0);

Выполнение останавливается при первой попытке записи данных в поток: write:maxLength: возвращает -1.

Чтобы выяснить, почему это происходит, я реализовал метод делегата handleEvent: eventCode:.

По какой-то причине он вызывается, только если при инициализации потока я помещаю следующие строки кода:

[self.outputFileStream scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];

и возвращает NSStreamEventErrorOccurred с описанием No such file or directory, хотя каталог дважды проверяется на наличие.

...