这可能是一个相当广泛的问题,但我找不到任何在线资源解决或解释此事。
问题是在创建NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]
之后,当您使用[writer writedata:"NSData"]
时,根据apple doc可能触发可能的异常。
“如果文件描述符已关闭或是,则此方法引发异常 如果接收器代表未连接的管道或插座,则无效 端点,如果文件系统上没有剩余可用空间,或者是否有其他空间 写错误发生。“ - APPLE DOC
我想知道的是,在写入之前,我们可以通过任何方式处理或验证这些问题而无需使用任何try catch或检查条件检查中的每个错误。我们可以使用NSError
来处理这个问题吗?
答案 0 :(得分:7)
我会说“不”。如果您在写入之前确实设法找到涵盖所有可能的故障的测试,那么在初始测试之后没有什么可说的写操作可能会失败(考虑写入一个免费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
,但对我来说,如何做到这一点并不是很明显。