Как использовать NSFileHandle для записи Handler? - PullRequest
6 голосов
/ 24 октября 2011

Начиная с OS X 10.7 и iOS 5.0 NSFileHandle имеет два новых свойства: readabilityHandler и writeabilityHandler.Я пытался использовать writeabilityHandler, но не повезло.Документация странная, похоже, что они вставили скопированное описание readabilityHandler и заменили слово read на write .

В соответствии с документацией назначение блока должно в конечном итоге вызватьблок.Это не.

- (void)sendResponse:(NSData*)dataToSend
{
    _incomingHandle.writeabilityHandler = 
    ^(NSFileHandle* fileHandle)
    {
        [fileHandle writeData:dataToSend]; // exception is thrown here
        fileHandle.writeabilityHandler = nil;
    };
    // Above block is not called without this line:
    //[_incomingHandle writeData:dataToSend];
}

Он вызывается только в том случае, если я пытаюсь синхронно записать в дескриптор [_incomingHandle writeData:dataToSend], что не имеет смысла.После того, как это вызвано, это вызывает исключение: EXC_BAD_INSTRUCTION

*** Terminating app due to uncaught exception 'NSFileHandleOperationException', reason:
'*** -[NSConcreteFileHandle writeData:]: Resource temporarily unavailable'

Я также попытался отправить данные по частям.Не повезло.

Кто-нибудь успешно использовал это свойство?

1 Ответ

0 голосов
/ 17 января 2012

Хм, у вас есть пример проекта, который я мог бы попробовать?У меня не было с этим проблем, даже когда я делал глупые вещи, такие как вложенные обработчики.Тестовый пример, показывающий, что он не работает, может помочь выяснить, в чем дело.

Одна проблема, с которой вы можете столкнуться, заключается в том, что использование dispatch_io внутри NSFileHandle изменит свойства любого fd, который вы передали.возможно, это ошибка в NSFileHandle, но пока она верна: /

...