2016-04-22 19 views
0

エクスポートされたオブジェクトを格納するためにplistファイルを使用している簡単なインポート/エクスポート機能でアプリケーションを拡張しました。オブジェクトを保存するには、NSDictionaryメソッドとwriteToURLメソッド(サンドボックスアプリケーション)を使用します。NSDictionary writeToURLから詳細なエラーメッセージを取得するにはどうすればよいですか?

コードの関連部分は次のようになります。失敗したファイルを保存する場合は、詳細なエラーメッセージを取得する方法があるかどう

savePanel.beginSheetModalForWindow(self.view.window!) { (result) in 
    savePanel.orderOut(nil) 
    if result == NSFileHandlingPanelOKButton { 
     let saveURL = savePanel.URL! 
     let values = NSMutableDictionary() 
     for propertyDescription in selectedEvent.entity.properties { 
      let propertyName = propertyDescription.name 
      values[propertyName] = selectedEvent.valueForKey(propertyName) 
     } 
     if !values.writeToURL(saveURL, atomically: true) { 
      // error handling? 
     } 
    } 
} 

今私はをだろうか?

+0

'writeToFile'だけブール値を返しhttps://developer.apple.com/library/watchos/documentation/Cocoa/Reference/Foundation/クラス/ NSDictionary_Class/index.html#// apple_ref/occ/instm/NSDictionary/writeToFile:atomically: – Moritz

+0

@EricDこれを完全に認識しています。したがって、私の質問:方法は、このメソッドが失敗した場合、詳細なエラーメッセージを取得する方法はありますか? – Flovdis

+0

エラーを処理したい場合は、NSDataメソッド 'func writeToURL(url:NSURL、options writeOptionsMask:NSDataWritingOptions)throws'を使用できます。 –

答えて

0

私は答えが非常に簡単であることを認識していませんでした。 NSDictionaryのヘルパーメソッドを使用する代わりに、NSPropertyListSerializationがあります。これは、デシリアライズされたplistをシリアル化する一連のメソッドを提供します。

このクラスを使用すると、NSDataオブジェクトが作成され、このオブジェクトがディスクに書き込まれます。 NSDataオブジェクトを書くことで、必要なエラー処理がすべて提供されます。

ここ新しいインプリメンテーションと、上記のコード例:

savePanel.beginSheetModalForWindow(self.view.window!) { (result) in 
    savePanel.orderOut(nil) 
    if result == NSFileHandlingPanelOKButton { 
     let saveURL = savePanel.URL! 
     let values = NSMutableDictionary() 
     for propertyDescription in selectedEvent.entity.properties { 
      let propertyName = propertyDescription.name 
      values[propertyName] = selectedEvent.valueForKey(propertyName) 
     } 
     do { 
      let data = try NSPropertyListSerialization.dataWithPropertyList(values, format: .XMLFormat_v1_0, options: NSPropertyListWriteOptions()) 
      try data.writeToURL(saveURL, options: [.DataWritingAtomic]) 
     } catch let error as NSError { 
      dispatch_async(dispatch_get_main_queue()) { 
       self.view.window!.presentError(error) 
      } 
     } catch { 
      let unknownError = NSError(domain: kAppErrorDomain, code: 201, userInfo: [ 
       NSLocalizedDescriptionKey: "Unknown error while writing the export file." 
      ]) 
      dispatch_async(dispatch_get_main_queue()) { 
       self.view.window!.presentError(unknownError) 
      } 
     } 
    } 
} 
+0

また、plのシリアル化エラー –

+0

@LeoDabusを処理する必要があります。私の特別なケースでは、辞書が常に問題なくシリアル化されることを保証できます。それにもかかわらず、サンプルコードを調整します。 – Flovdis

関連する問題