这可能是一个相当广泛的问题,但我找不到任何在线资源来解决或解释这个问题。
问题是创建后NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]
当你使用[writer writedata:"NSData"]
根据苹果文档,有可能发生的异常情况。
“如果文件描述符已关闭或已关闭,则此方法会引发异常
如果接收者代表未连接的管道或套接字,则无效
端点,如果文件系统上没有剩余空间,或者如果有任何其他
发生写入错误。” - APPLE DOC
我想知道的是,有什么方法可以处理或验证这些问题,而无需使用任何 try catch 或在写入之前检查条件检查中的每个错误。我们可以使用任何可能的方式NSError
来处理这个?
我会说“不”。如果您在写入之前确实找到了涵盖所有可能失败的测试,那么就没有什么可说的,在这个初始测试之后写入操作可能会失败(想象一下写入一个有 1KB 空闲空间的文件系统,而您想要写入 4KB)。
因此将对这些方法的调用包装在@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
,但对我来说如何去做这件事并不是很明显。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)