这可能是相当广泛的问题,但我找不到任何在线资源,解决或解释这一问题。
问题是在创建NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]之后,当您使用[writer writedata:"NSData"]时,可能会出现一些例外,根据苹果文档的说法。
“如果文件描述符关闭或无效,如果接收方表示未连接的管道或套接字端点,如果文件系统上没有空闲空间,或者发生任何其他写入错误,则此方法将引发异常。”- APPLE DOC。
我想知道的是,有任何方法可以处理或验证这些问题,而无需使用任何try、catch或在写入之前检查条件中的每个错误。我们可以用NSError来处理这个问题吗?
发布于 2013-06-05 12:14:26
我会说“不”。如果您确实在编写之前找到了一个包含了所有可能的失败的测试,那么没有什么可以说写操作在这个初始测试之后可能会失败(考虑一下免费写入一个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中,但对于我来说,如何做到这一点并不是显而易见的。
https://stackoverflow.com/questions/16939295
复制相似问题