NSError コードの調べ方

NSFileManager の -moveItemAtPath:toPath:error: でファイルを移動しようとしたら、こんなエラーが出た。大抵の場合、エラーメッセージから推測できるんだけど、これは不親切。(T^T)

The operation couldn’t be completed. (Cocoa error 512.)


仕方ないので、NSError コードの調べ方をググってみたら、こちらさんの記事が分かりやすかった。参考にさせていただきます :-)


基本は Error Handling Programming GuideのError Objects, Domains, and Codes セクションを見ましょーとのこと。

Mac OS X(やiOS)のエラーは、エラードメインに分けられていて、NSError.hに次の4つのエラードメインが定義されています。ふむふむ。φ(.. )


エラーは4つのドメインに分かれてて、

  • NSMachErrorDomain
  • NSPOSIXErrorDomain
  • NSOSStatusErrorDomain
  • NSCocoaErrorDomain


さらにフレームワーク毎に定義されたエラードメインがあって、各ドメインのエラー番号は次のヘッダファイルに定義されてるそうな。Xcode が入ってる Mac で Spotlight 検索すると、見つけやすいとのこと。ふむふむ φ(.. )

Cocoa (NSCocoaErrorDomain)
WebKitErrorDomain
NSURLErrorDomain
NSXMLParserErrorDomain
Carbon (NSOSStatusErrorDomain) CarbonCore.framework/Headers/MacErrors.h
POSIX (NSPOSIXErrorDomain) /usr/include/sys/errno.h
Mach (NSMachErrorDomain) /usr/include/mach/kern_return.h


調べ方の基本は分かった。さっそく試してみよ。:-)

今回のは NSFileManager のエラーだから、Foundation/FoundationErrors.h で良いはず。Spotlight で検索すると FoundationErrors.h が見つかった。

/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/FoundationErrors.h

Xcode で開いてみると、、、おーい ^^;)

enum {
....
NSFileWriteUnknownError = 512, // Write error (reason unknown)