NSFileHandle writeData: обработка исключений
Это может быть довольно широкой проблемой, но я не смог найти ни одного интернет-ресурса, который бы разрешал или объяснял этот вопрос.
Вопрос после создания NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]
и когда вы используете [writer writedata:"NSData"]
Есть синус возможное исключение, которое может сработать в соответствии с Apple Doc.
"Этот метод вызывает исключение, если файловый дескриптор закрыт или недействителен, если получатель представляет неподключенную конечную точку канала или сокета, если в файловой системе не осталось свободного места или если произошла какая-либо другая ошибка записи". - APPLE DOC
Все, что я хочу знать, это то, что мы можем как-то обработать или проверить эти проблемы, не используя попытку catch или проверку каждой ошибки в проверке состояния перед записью. Любой возможный способ, которым мы можем использовать NSError
справиться с этим?
1 ответ
Я бы сказал "Нет". Если вам удалось найти тест, который охватывал все возможные сбои перед записью, то нечего сказать, что операция записи может завершиться неудачно после этого начального теста (подумайте о записи в файловую систему с 1 КБ свободной и вы хотите записать 4 КБ).
Поэтому обернуть ваши вызовы этих методов внутри @try/@catch
блок кажется мне лучшим подходом. Эти обертки могут затем вернуть NSError **
если вы хотите получить подробную информацию о сбое (что вы, безусловно, должны хотеть).
- (BOOL)writeData:(NSData *)data
toFileHandle:(NSFileHandle *)fileHandler
error:(NSError **)error
{
@try
{
[fileHandler writeData:data];
}
@catch (NSException *e)
{
if (error != NULL)
{
NSDictionary *userInfo = @{
NSLocalizedDescriptionKey : @"Failed to write data",
// Other stuff?
};
*error = [NSError errorWithDomain:@"MyStuff" code:123 userInfo:userInfo];
}
return NO;
}
return YES;
}
Вы наверняка захотите узнать причину неудачи в NSError
, но для меня не сразу очевидно, как это сделать.