NSFileHandle writeData:异常处理

Gih*_*han 5 objective-c nsfilehandle ipad ios

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

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

"如果文件描述符关闭或无效,如果接收器表示未连接的管道或套接字端点,文件系统上没有剩余空间,或者发生任何其他写入错误,则此方法引发异常." - APPLE DOC

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

tro*_*foe 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;
}
Run Code Online (Sandbox Code Playgroud)

你当然希望得到失败的原因NSError,但对我来说,如何去做这件事并不是很明显.