ios - NSFileHandle 写数据 : exception handling

标签 ios objective-c ipad nsfilehandle

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

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

"This method raises an exception if the file descriptor is closed or is not valid, if the receiver represents an unconnected pipe or socket endpoint, if no free space is left on the file system, or if any other writing error occurs." - APPLE DOC

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

最佳答案

我会说“不”。如果您在写入之前确实设法找到了一个涵盖所有可能失败的测试,那么没有什么可以说在这个初始测试之后写入操作可能会失败(考虑写入一个有 1KB 可用空间的文件系统,而你想写入 4KB)。

因此,在我看来,将对这些方法的调用包装在 @try/@catch block 中是最好的方法。然后,如果您需要失败的详细信息(您当然应该想要),这些包装器可以返回一个 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 中找到失败的原因,但我并不清楚如何去做。

关于ios - NSFileHandle 写数据 : exception handling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16939295/

相关文章:

objective-c - ARC __bridge cast Block_copy 和 Block_release

ios - 需要更好更简单地理解 CATransform3D

ios 我想从 AppDelegate 访问 MainViewController 中的对象

objective-c - ARC 转换后的应用程序在最后一次调用 .cxx_destruct 时崩溃

iphone - 使用 CSS 设置 UIWebView 样式时的图片路径

ios - IOS应用白标方式

iOS - 将 AFNetworking 与自定义 NSURLProtocol 类一起使用

javascript - 关于 iPad 版 iscroll.js 的问题

iphone - CocoaAsyncSocket 在后台后不起作用

objective-c - 有没有办法手动或以编程方式选择/删除 ipad 上相册中的所有/多个图像?