76 votes

Comment voulez-vous convertir un IPhone OSStatus code pour quelque chose d'utile?

Je suis plus que un peu marre de ce sdk de l'iphone et de la documentation...

Je fais appel AudioConverterNew

dans la documentation en vertu de retour: il dit "renvoie un code d'état" ... vraiment...

jusqu'à présent, par l'intermédiaire de jouer avec les paramètres que j'ai seulement été en mesure d'obtenir deux différents des erreurs, ni de qui sont listés sur le bas de l'Audio Converter référence.

ils sont "mrep' et '?tmf' (le casting du OSStatus à un char array) mais les codes spécifiques ne sont pas vraiment au point.

aussi loin que je peux dire, au hasard des codes d'erreur sont définis dans des fichiers aléatoires, de sorte que vous ne pouvez pas il suffit de chercher un fichier, je ne peux pas trouver un document d'aide qui vient vous permet de rechercher un code d'erreur pour obtenir plus d'infos, et de ce que je peux dire, dans OSX, vous pouvez utiliser GetMacOSStatusErrorString() pour convertir une erreur à quelque chose d'utile, mais il n'y a pas de iphone équivalent?

toute aide serait grandement appréciée.

EDIT:

ok, donc la coulée eux leur fait dans le sens inverse (quelque chose que j'ai vérifié pour "mrep", mais n'était pas là de toute façon à la ronde) , de l'esf? est dans la liste pour le Convertisseur Audio api, et est assez explicite si un peu vague, mais juste assez, toujours "perm' n'est pas là (même si il pourrait être quelque chose à voir avec le simulateur de ne pas soutenir décodage aac) et ma question est toujours debout.

97voto

tomk Points 716

OSStatus est un entier signé valeur. Vous ne pouvez pas convertir ou "cast" en une chaîne. Vous pouvez convertir en un NSError comme ceci:

NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:osStatus userInfo:nil];

34voto

KennyTM Points 232647

Pas de. Du moins pas avec une API publique.

Mais certains OSStatus sont de quatre caractères de codes, de sorte que vous pouvez utiliser (extrait du SDK de l'iPhone de l'exemple de code "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;
}

15voto

Jai Points 1193

Je sais que c'est un vieux post, mais j'ai été lire l'apple docs dans une section portant sur les porte-clés. Ils mentionnent une méthode qui est utilisé pour convertir OSStatus erreurs en quelque chose de lisible.

SecCopyErrorMessageString

Retourne une chaîne de caractères à expliquer le sens d'une sécurité code de résultat.

SecCopyErrorMessageString (OSStatus état, void* réservé );

Limite d'emploi:

NSString* ErrMsg = (__bridge NSString *) SecCopyErrorMessageString(theOSStatusError, NULL);

Il a travaillé pour moi avec mon trousseau OSStatus erreurs. Faut-il travailler pour vous? Vous aurez besoin de Sécurité.Cadre ajoutée à votre projet pour utiliser cette méthode.

14voto

lros Points 11

Récemment, j'ai couru à travers une autre approche: la macerror de commande. Imprimer les OSStatus valeur comme un entier signé. Puis dans une fenêtre de terminal (sur votre Mac, pas de votre iDevice!) par exemple de type macerror -50. Il répondra avec une brève description. Évidemment, ce n'est seulement utile pour vous, au cours du développement.

10voto

Echo Lu Points 253

Voici le code que j'ai écrit, j'espère qu'elle vous sauver un peu de temps... euh, je ne sais pas comment faire pour faire apparaître correctement.

- (NSString *)OSStatusToStr:(OSStatus)st
{
    switch (st) {
        case kAudioFileUnspecifiedError:
            return @"kAudioFileUnspecifiedError";

        case kAudioFileUnsupportedFileTypeError:
            return @"kAudioFileUnsupportedFileTypeError";

        case kAudioFileUnsupportedDataFormatError:
            return @"kAudioFileUnsupportedDataFormatError";

        case kAudioFileUnsupportedPropertyError:
            return @"kAudioFileUnsupportedPropertyError";

        case kAudioFileBadPropertySizeError:
            return @"kAudioFileBadPropertySizeError";

        case kAudioFilePermissionsError:
            return @"kAudioFilePermissionsError";

        case kAudioFileNotOptimizedError:
            return @"kAudioFileNotOptimizedError";

        case kAudioFileInvalidChunkError:
            return @"kAudioFileInvalidChunkError";

        case kAudioFileDoesNotAllow64BitDataSizeError:
            return @"kAudioFileDoesNotAllow64BitDataSizeError";

        case kAudioFileInvalidPacketOffsetError:
            return @"kAudioFileInvalidPacketOffsetError";

        case kAudioFileInvalidFileError:
            return @"kAudioFileInvalidFileError";

        case kAudioFileOperationNotSupportedError:
            return @"kAudioFileOperationNotSupportedError";

        case kAudioFileNotOpenError:
            return @"kAudioFileNotOpenError";

        case kAudioFileEndOfFileError:
            return @"kAudioFileEndOfFileError";

        case kAudioFilePositionError:
            return @"kAudioFilePositionError";

        case kAudioFileFileNotFoundError:
            return @"kAudioFileFileNotFoundError";

        default:
            return @"unknown error";
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X