5

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

问题是在创建之后NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"],当您使用时[writer writedata:"NSData"],根据苹果文档可能会触发正弦异常。

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

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

4

1 回答 1

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.

于 2013-06-05T12:14:26.313 回答