【问题标题】: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 中找到失败的原因,但我并不立即明白如何执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-29
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多