NSError代码:URL加载意味着网络丢失的系统错误

Geo*_*ell 10 iphone nsurlconnection ios

我正在尝试写一个所有可能的URL错误代码的明确列表,这意味着网络连接丢失,包括blips和延长的中断.这是我到目前为止:

NSURLErrorNotConnectedToInternet
NSURLErrorCannotConnectToHost
NSURLErrorTimedOut
NSURLErrorCannotFindHost
NSURLErrorCallIsActive
NSURLErrorNetworkConnectionLost
NSURLErrorDataNotAllowed

我正在报告应用程序遇到的Web服务错误,我想过滤掉由于没有Web服务错误而导致的错误.我查看从NSURLConnectionDelegate的connection:didFailWithError:方法中传递的错误对象获取的URL错误代码.此外,我不想在调用Web服务之前每次都检查Reachability,因为网络连接仍然可能随机丢失.如果您有自己的清单或更好的建议,请告诉我.谢谢.

Nik*_*esh 11

NSURLErrorCannotFindHost = -1003,

NSURLErrorCannotConnectToHost = -1004,

NSURLErrorNetworkConnectionLost = -1005,

NSURLErrorDNSLookupFailed = -1006,

NSURLErrorHTTPTooManyRedirects = -1007,

NSURLErrorResourceUnavailable = -1008,

NSURLErrorNotConnectedToInternet = -1009,

NSURLErrorRedirectToNonExistentLocation = -1010,

NSURLErrorInternationalRoamingOff = -1018,

NSURLErrorCallIsActive = -1019,

NSURLErrorDataNotAllowed = -1020,

NSURLErrorSecureConnectionFailed = -1200,

NSURLErrorCannotLoadFromNetwork = -2000,

  • 其中大多数并不意味着网络连接丢失.例如,NSURLErrorHTTPTooManyRedirects是一个无限循环的重定向,所以当发生这种情况时,显然你有一个网络连接. (2认同)

iln*_*_al 6

我在我的项目中使用以下方法

-(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;
}
Run Code Online (Sandbox Code Playgroud)

然后我只检查错误代码并显示警告,如果它在列表中

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

我使用StoreKit从未记录的NSURLErrorDomain错误代码(-1001,-1003和-1004)中使用列表

但正如你所看到的,我注释掉了我认为不适合我对NO INTERNET的定义的代码.例如-1012的代码(验证失败.)您可以根据需要编辑列表.

在我的项目中,我使用从用户输入的用户名/密码.在我看来(物理)网络连接错误可能是在基于网络的应用程序中显示警报视图的唯一原因.在任何其他情况下(例如,不正确的用户名/密码对)我更喜欢做一些自定义的用户友好动画,或者只是在没有用户注意的情况下再次重复失败的尝试.特别是如果用户没有明确发起网络呼叫.

关于martinezdelariva从我提到的问题链接到文档.