NSFileHandle writeData:异常处理

时间:2013-06-05 11:55:32

标签: ios objective-c ipad nsfilehandle

这可能是一个相当广泛的问题,但我找不到任何在线资源解决或解释此事。

问题是在创建NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]之后,当您使用[writer writedata:"NSData"]时,根据apple doc可能触发可能的异常。

  

“如果文件描述符已关闭或是,则此方法引发异常   如果接收器代表未连接的管道或插座,则无效   端点,如果文件系统上没有剩余可用空间,或者是否有其他空间   写错误发生。“ - APPLE DOC

我想知道的是,在写入之前,我们可以通过任何方式处理或验证这些问题而无需使用任何try catch或检查条件检查中的每个错误。我们可以使用NSError来处理这个问题吗?

1 个答案:

答案 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,但对我来说,如何做到这一点并不是很明显。