1. ホーム
  2. ios

iPhoneのOSStatusコードを有用なものに変換するには?

2023-11-28 13:14:20

質問

私はこのiPhone SDKとそのドキュメントに少しばかりうんざりしています...。

AudioConverterNew を呼び出しているところです。

のドキュメントで、Returns: に "returns a status code" と書いてあるのですが、これは何ですか? ... 本当に...

これまでのところ、パラメーターで遊んでいる間、私は 2 つの異なるエラーを得ることができましたが、どちらも Audio Converter リファレンスの下部に記載されていません。

これらは 'mrep' と '?tmf' (OSStatus を char 配列にキャストする) ですが、特定のコードは実際には重要ではありません。

私が知る限り、ランダムなエラーコードはランダムなファイルに定義されているので、1 つのファイルを検索することはできません。また、エラーコードを検索して詳細情報を取得できるヘルプドキュメントも見つかりません。私が知る限り、OS X では GetMacOSStatusErrorString() を使用してエラーを何か役に立つものに変換できますが、iPhone には同等のものがないのでしょうか?

どんな助けでも、非常に感謝されます。

EDITです。

OK、それで、それらをキャストすると、それらは逆になります (私は 'mrep' についてチェックしましたが、どちらの方法でもありませんでした)、fmt? は Audio Converter api のリストにあり、少し曖昧ですがかなり自己説明的です、しかし公平です、まだ 'perm' はそこにありません (aac デコードをサポートしないシミュレータに関係するかもしれませんが)、私の一般的な質問はまだ残っています。

どのように解決するのですか?

いいえ、完全ではありません。

OSStatusの中には4文字コードのものもあるので、(iPhone SDKのサンプルコード"より抜粋。 CAXException.h ")を使用することができます。

static char *FormatError(char *str, OSStatus error)
{
    // see if it appears to be a 4-char-code
    *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
    if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
        str[0] = str[5] = '\'';
        str[6] = '\0';
    } else {
        // no, format it as an integer
        sprintf(str, "%d", (int)error);
    }
    return str;
}

(参照 iOS/C: 整数("integer")を4文字の文字列に変換する を参照してください)

NSErrorのNSOSStatusErrorDomainは、いくつかのOSエラーをデコードすることができます。以下を参照してください。 @tomk さんの回答 .

ユーザーのためにプログラム中の数字をデコードする必要がない場合は macerror スクリプトを使って手動で意味を調べることができます。 lrosさんの回答 . サポートされている OSStatus の一覧は、そのソースコードから /System/Library/Perl/Extras/5.18/Mac/Errors.pm .

また、オンラインサービスもあります http://osstatus.com/ があり、すべての公開フレームワークからエラーを収集しています。これらはまだ完全なものではありません。 -12792 へのマッピングが欠落しています。おそらく、これはプライベートフレームワークからのコードです。