Io uso il seguente metodo nel mio progetto
-(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;
}
Poi ho solo controllare il codice di errore e mostrare avviso se è nella lista
if ([[self networkErrorCodes] containsObject:[NSNumber
numberWithInt:[error code]]]){
// Fire Alert View Here
}
I utilizzare l'elenco da Undocumented NSURLErrorDomain error codes (-1001, -1003 and -1004) using StoreKit
Ma come potete vedere ho commentato i codici che penso non si adattano alla mia def inizione di NO INTERNET. E.g il codice di -1012 (Errore di autenticazione.) È possibile modificare l'elenco come desiderato.
Nel mio progetto lo uso a nome utente/password inserendo dall'utente.E a mio avviso, gli errori di connessione di rete (fisica) potrebbero essere l'unico motivo per mostrare la visualizzazione di avviso nell'app basata sulla rete. In tutti gli altri casi (ad esempio coppia di username/password errata) preferisco creare un'animazione personalizzata di facile utilizzo, OPPURE ripetere il tentativo fallito senza alcuna attenzione da parte dell'utente. Soprattutto se l'utente non ha avviato esplicitamente una chiamata di rete.
Saluti a martinezdelariva dalla domanda che ho citato per un collegamento alla documentazione.
https://developer.apple.com/library/ios/#documentation/cocoa/reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html –
NSHipster ha una grande panoramica di quelli: http://nshipster.com/nserror/ – dlinsin