112 votes

Codes d'erreur NSURLErrorDomain non documentés (-1001, -1003 et -1004) à l'aide de StoreKit

Je suis en train d'écrire StoreKit code, et je suis assez troublant codes d'erreur lorsque j'essaie d'ajouter un achat de la file d'attente.

Jusqu'à présent, j'ai connu les codes d'erreur -1003 et -1004 et je ne peux pas trouver quelque chose à propos de ces codes sur internet.

L'exécution d'un produit demande des retours de produit valide les numéros, donc je ne sais pas pourquoi les appels à l' [[SKPaymentQueue defaultQueue] addPayment:aPayment]; échouerait avec ce problème des sans-papiers.

Le même code fonctionne aussi sans les erreurs sur un appareil, mais pas sur l'autre.

Les questions que j'ai sont encore sans réponse:

Que faire de ces codes veux dire? Comment puis-je atténuer ce problème? Pourquoi sont-ils en passe de tentatives d'achat et non pour les demandes de produit?

Dépannage j'ai fait comprend la régénération d'un certificat de signature et profil d'approvisionnement, l'évolution des réseaux WiFi, nettoyage du bâtiment et de la réinstallation de tous les logiciels et composants, et aucune de ces choses individuellement ou ensemble, ont contribué à résoudre le problème.

EDIT:

Trouvé une discussion à ce sujet sur le dev Apple forums, mais pas de celui d'Apple, a répondu: https://devforums.apple.com/thread/107121?tstart=75 (compte développeur iOS requis pour visionner)

EDIT:

J'ai été frappé avec le code d'erreur -1001 aujourd'hui, d'ajouter à cette liste d'inexplicable et des problèmes intermittents. Toujours pas de reddition de comptes auprès d'Apple, ce que je peux trouver.

EDIT:

Je soupçonne que ces codes d'erreur sont générés au hasard et vraiment indique seulement que le bac à sable est en baisse. Quelqu'un d'autre l'expérience de ce problème?

356voto

martinezdelariva Points 1525

Tous les codes d'erreur figurent dans "Références des codes d'erreur CFNetwork" dans la documentation ( lien ).

Une petite extraction pour CFURL et CFURLConnection Erreurs:

   kCFURLErrorUnknown   = -998,
  kCFURLErrorCancelled = -999,
  kCFURLErrorBadURL    = -1000,
  kCFURLErrorTimedOut  = -1001,
  kCFURLErrorUnsupportedURL = -1002,
  kCFURLErrorCannotFindHost = -1003,
  kCFURLErrorCannotConnectToHost    = -1004,
  kCFURLErrorNetworkConnectionLost  = -1005,
  kCFURLErrorDNSLookupFailed        = -1006,
  kCFURLErrorHTTPTooManyRedirects   = -1007,
  kCFURLErrorResourceUnavailable    = -1008,
  kCFURLErrorNotConnectedToInternet = -1009,
  kCFURLErrorRedirectToNonExistentLocation = -1010,
  kCFURLErrorBadServerResponse             = -1011,
  kCFURLErrorUserCancelledAuthentication   = -1012,
  kCFURLErrorUserAuthenticationRequired    = -1013,
  kCFURLErrorZeroByteResource        = -1014,
  kCFURLErrorCannotDecodeRawData     = -1015,
  kCFURLErrorCannotDecodeContentData = -1016,
  kCFURLErrorCannotParseResponse     = -1017,
  kCFURLErrorInternationalRoamingOff = -1018,
  kCFURLErrorCallIsActive               = -1019,
  kCFURLErrorDataNotAllowed             = -1020,
  kCFURLErrorRequestBodyStreamExhausted = -1021,
  kCFURLErrorFileDoesNotExist           = -1100,
  kCFURLErrorFileIsDirectory            = -1101,
  kCFURLErrorNoPermissionsToReadFile    = -1102,
  kCFURLErrorDataLengthExceedsMaximum   = -1103,
 

25voto

JOM Points 4282

J'ai des problèmes similaires, dans mon cas, semblent être liés à la connectivité de réseau:

Erreur de Domaine=NSURLErrorDomain Code=-1001 "La demande dépassé."

Les choses à vérifier:

  • Est-il possible que votre serveur n'est pas en mesure de répondre dans un délai? Comme 60 secondes ou 4 minutes?
  • Est-il possible que votre appareil est de commutation de réseaux (WiFi, 3G, VPN)?
  • Quelqu'un pourrait-il (client et serveur) être en attente pour l'authentification?

Désolé, pas d'idées comment les corriger. Juste de débogage ce, en essayant de trouver quel est le problème (-1021, -1001, -1009)

Mise à jour: recherche Google a été très gentil de trouver ceci:

  • -1001 TimedOut - il a fallu plus de temps que le délai qui était imparti.
  • -1003 CannotFindHost - l'hôte n'a pas pu être trouvé.
  • -1004 CannotConnectToHost - l'hôte ne nous laissera pas établir une connexion.

3voto

Ilnar Aliullov Points 74

J'utilise la méthode suivante dans mon projet

-(NSArray*)networkErrorCodes
{
    static NSArray *codesArray;
    if (![codesArray count]){
        @synchronized(self){
            const int codes[] = {
                //kCFURLErrorUnknown,     //-998
                //kCFURLErrorCancelled,   //-999
                //kCFURLErrorBadURL,      //-1000
                //kCFURLErrorTimedOut,    //-1001
                //kCFURLErrorUnsupportedURL, //-1002
                //kCFURLErrorCannotFindHost, //-1003
                kCFURLErrorCannotConnectToHost,     //-1004
                kCFURLErrorNetworkConnectionLost,   //-1005
                kCFURLErrorDNSLookupFailed,         //-1006
                //kCFURLErrorHTTPTooManyRedirects,    //-1007
                kCFURLErrorResourceUnavailable,     //-1008
                kCFURLErrorNotConnectedToInternet,  //-1009
                //kCFURLErrorRedirectToNonExistentLocation,   //-1010
                kCFURLErrorBadServerResponse,               //-1011
                //kCFURLErrorUserCancelledAuthentication,     //-1012
                //kCFURLErrorUserAuthenticationRequired,      //-1013
                //kCFURLErrorZeroByteResource,        //-1014
                //kCFURLErrorCannotDecodeRawData,     //-1015
                //kCFURLErrorCannotDecodeContentData, //-1016
                //kCFURLErrorCannotParseResponse,     //-1017
                kCFURLErrorInternationalRoamingOff, //-1018
                kCFURLErrorCallIsActive,                //-1019
                //kCFURLErrorDataNotAllowed,              //-1020
                //kCFURLErrorRequestBodyStreamExhausted,  //-1021
                kCFURLErrorFileDoesNotExist,            //-1100
                //kCFURLErrorFileIsDirectory,             //-1101
                kCFURLErrorNoPermissionsToReadFile,     //-1102
                //kCFURLErrorDataLengthExceedsMaximum,     //-1103
            };
            int size = sizeof(codes)/sizeof(int);
            NSMutableArray *array = [[NSMutableArray alloc] init];
            for (int i=0;i<size;++i){
                [array addObject:[NSNumber numberWithInt:codes[i]]];
            }
            codesArray = [array copy];
        }
    }
    return codesArray;
}

Alors je viens de vérifier le code d'erreur et afficher une alerte si elle est dans la liste

if ([[self networkErrorCodes] containsObject:[NSNumber
numberWithInt:[error code]]]){ 
// Fire Alert View Here
}

Mais comme vous pouvez le voir j'ai commenté les codes que je pense ne correspond pas à ma définition de l'INTERNET. E. g le code de -1012 (échec de l'Authentification.) Vous pouvez modifier la liste que vous le souhaitez.

Dans mon projet, je l'utilise au nom d'utilisateur/mot de passe saisie de l'utilisateur. Et de mon point de vue (physique) des erreurs de connexion réseau peut être la seule raison de montrer de l'affichage des alertes dans votre réseau en fonction de l'app. Dans les autres cas (par exemple, nom d'utilisateur incorrect/mot de passe), je préfère faire quelques personnalisé convivial animation, OU il suffit de répéter l'échec de la tentative de nouveau sans aucune attention de l'utilisateur. Surtout si l'utilisateur n'a pas explicitement lancé un appel réseau.

Ce qui concerne martinezdelariva pour un lien vers la documentation.

1voto

Jon Points 315

J'ai trouvé cette page dans la documentation qui a un objectif-c enum pour tous les codes d'erreur sous le NSURLErrorDomain.

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Misc Miscellaneous/Foundation_Constants/index.html

recherchez "Codes d'erreur du système de chargement d'URL"

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