2013-06-05 58 views
5

這可能是一個相當廣泛的問題,但我找不到任何在線資源解決或解釋此事。NSFileHandle writeData:異常處理

問題是在創建NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"]之後,當您使用[writer writedata:"NSData"]時,根據apple文檔可能會觸發正弦可能的異常。

「這種方法如果文件描述符關閉或 無效,如果接收器表示未連接的管道或插座 終點,如果沒有可用空間留在文件系統上,或將引發異常,如果任何其他 發生寫入錯誤。「 - 蘋果DOC

我想知道的是,有什麼方法可以處理或驗證這些問題,而無需在寫入之前使用任何try catch或檢查條件檢查中的每個錯誤。任何可能的方式,我們可以使用NSError來處理這個?

回答

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的原因,但它不會立即明顯,我怎麼去這樣做。