【问题标题】:NSFileHandle writeData: exception handlingNSFileHandle writeData:异常处理
【发布时间】:2013-06-05 11:55:31
【问题描述】:
这可能是一个相当广泛的问题,但我找不到任何在线资源来解决或解释这个问题。
问题是在创建NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"] 之后,当您使用[writer writedata:"NSData"] 时,根据苹果文档可能会触发正弦异常。
"如果文件描述符已关闭或已关闭,此方法将引发异常
无效,如果接收者代表一个未连接的管道或套接字
端点,如果文件系统上没有剩余空间,或者任何其他
出现写入错误。” - APPLE DOC
我想知道的是,有没有什么方法可以处理或验证这些问题,而无需使用任何 try catch 或在写入前检查条件检查中的每个错误。我们可以使用NSError 来处理这个问题吗?
【问题讨论】:
标签:
ios
objective-c
ipad
nsfilehandle
【解决方案1】:
我会说“不”。如果您确实设法在写入之前找到了涵盖所有可能失败的测试,那么在此初始测试之后写入操作可能会失败(考虑写入可用 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 中找到失败的原因,但我并不立即明白如何执行此操作。