2011-07-21 569 views
89

我写StoreKit相关的代码,我得到了一些相当麻烦的错误代码,当我尝试购买添加到队列中。无证NSURLErrorDomain错误代码(-1001,-1003和-1004)使用StoreKit

到目前为止,我遇到了错误代码-1003和-1004,我无法在互联网上找到有关这些代码的任何内容。

运行产品请求会返回有效的产品编号,因此我不知道为什么对[[SKPaymentQueue defaultQueue] addPayment:aPayment];的调用会因此未记录的问题而失败。

相同的代码也可以在一个设备上没有错误,但在另一个设备上没有错误。

我的问题是,到目前为止,还没有答案:

做这些代码是什么意思? 我该如何缓解这个问题? 它们为什么会发生购买尝试而不是产品要求?

故障排除我已完成的任务包括重新生成签名证书和配置文件,更改WiFi网络,清理和构建并重新安装所有相关软件和组件,以上都不是单独或共同解决问题。

编辑:

发现了一个关于这个在苹果开发论坛的讨论,但苹果没有人回应:(需要iOS开发者帐户,查看)https://devforums.apple.com/thread/107121?tstart=75

编辑:

我今天打错误代码-1001,以添加到这个不可解释和间歇性问题的列表。仍然没有苹果公司的问责,我可以找到。

编辑:

我有这些错误代码是随机生成的,实际上应该只表明该沙盒是下来怀疑。任何人都会遇到这个问题?

回答

293

所有的错误代码都在文件上“CFNetwork的错误代码参考”(link

为CFURL和CFURLConnection误差小的提取:

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, 
+1

这些属于CFNetwork框架> CFNetworkErrors.h标题。 –

+1

此文档有关于何时发生错误的更多信息:[NSURLError系列](https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Constants/Reference/reference。html#// apple_ref/doc/constant_group/URL_Loading_System_Error_Codes) –

+2

这也可能有用:http://nshipster.com/nserror/ – user1021430

25

我有类似的问题,在我的情况似乎通过网络连接到相关:

错误域= NSURLErrorDomain代码= -1001“请求超时”。

检查事项:

  • 是否有任何机会,你的服务器是不是能在一定时限内作出回应?像60秒或4分钟?
  • 有没有一种可能,你的设备交换网络(WIFI,3G,VPN)?
  • 可能有人(客户端与服务器)是等待验证?

对不起,没有想法如何解决。就在调试这个,试图找出问题是什么(-1021,-1001,-1009)

更新:谷歌搜索很客气找到这样的:

  • -1001 TIMEDOUT - 它花费的时间超过了超时。
  • -1003 CannotFindHost - 找不到主机。
  • -1004 CannotConnectToHost - 主持人不让我们建立连接。
+1

“有没有可能是你的服务器无法在一定的时间内响应?“你知道,这是杀手,我试图与这个代码联系的是苹果的服务器,所以这不是我的服务器,它很快就会崩溃。 – Hyperbole

+0

Hey Jom,在iPhone中它对我们有好处,但在iPad中我们有时会崩溃,此消息显示“-1001 TimedOut”消息。但我的问题是,如果TimedOut它应该出现在iPhone和iPad。在此先感谢@JOM – Babul

4

我用下面的方法在我项目

-(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; 
} 

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

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

但正如你所看到的,我已经注释掉了我认为不适合我的NO INTERNET定义的代码。例如-1012的代码(验证失败。) 您可以随意编辑列表。

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

问候martinezdelariva的链接,文档。

+0

这可能是一个类方法! –

12

看到NSURLError.h定义

NSURLErrorUnknown =    -1, 
NSURLErrorCancelled =   -999, 
NSURLErrorBadURL =    -1000, 
NSURLErrorTimedOut =   -1001, 
NSURLErrorUnsupportedURL =   -1002, 
NSURLErrorCannotFindHost =   -1003, 
NSURLErrorCannotConnectToHost =   -1004, 
NSURLErrorNetworkConnectionLost =  -1005, 
NSURLErrorDNSLookupFailed =   -1006, 
NSURLErrorHTTPTooManyRedirects =  -1007, 
NSURLErrorResourceUnavailable =   -1008, 
NSURLErrorNotConnectedToInternet =  -1009, 
NSURLErrorRedirectToNonExistentLocation = -1010, 
NSURLErrorBadServerResponse =  -1011, 
NSURLErrorUserCancelledAuthentication =  -1012, 
NSURLErrorUserAuthenticationRequired = -1013, 
NSURLErrorZeroByteResource =  -1014, 
NSURLErrorCannotDecodeRawData =    -1015, 
NSURLErrorCannotDecodeContentData =   -1016, 
NSURLErrorCannotParseResponse =    -1017, 
NSURLErrorAppTransportSecurityRequiresSecureConnection NS_ENUM_AVAILABLE(10_11, 9_0) = -1022, 
NSURLErrorFileDoesNotExist =  -1100, 
NSURLErrorFileIsDirectory =   -1101, 
NSURLErrorNoPermissionsToReadFile =  -1102, 
NSURLErrorDataLengthExceedsMaximum NS_ENUM_AVAILABLE(10_5, 2_0) = -1103, 

// SSL errors 
NSURLErrorSecureConnectionFailed =  -1200, 
NSURLErrorServerCertificateHasBadDate =  -1201, 
NSURLErrorServerCertificateUntrusted = -1202, 
NSURLErrorServerCertificateHasUnknownRoot = -1203, 
NSURLErrorServerCertificateNotYetValid = -1204, 
NSURLErrorClientCertificateRejected = -1205, 
NSURLErrorClientCertificateRequired = -1206, 
NSURLErrorCannotLoadFromNetwork =  -2000, 

// Download and file I/O errors 
NSURLErrorCannotCreateFile =  -3000, 
NSURLErrorCannotOpenFile =   -3001, 
NSURLErrorCannotCloseFile =   -3002, 
NSURLErrorCannotWriteToFile =  -3003, 
NSURLErrorCannotRemoveFile =  -3004, 
NSURLErrorCannotMoveFile =   -3005, 
NSURLErrorDownloadDecodingFailedMidStream = -3006, 
NSURLErrorDownloadDecodingFailedToComplete =-3007, 

NSURLErrorInternationalRoamingOff NS_ENUM_AVAILABLE(10_7, 3_0) =   -1018, 
NSURLErrorCallIsActive NS_ENUM_AVAILABLE(10_7, 3_0) =     -1019, 
NSURLErrorDataNotAllowed NS_ENUM_AVAILABLE(10_7, 3_0) =     -1020, 
NSURLErrorRequestBodyStreamExhausted NS_ENUM_AVAILABLE(10_7, 3_0) =  -1021, 

NSURLErrorBackgroundSessionRequiresSharedContainer NS_ENUM_AVAILABLE(10_10, 8_0) = -995, 
NSURLErrorBackgroundSessionInUseByAnotherProcess NS_ENUM_AVAILABLE(10_10, 8_0) = -996, 
NSURLErrorBackgroundSessionWasDisconnected NS_ENUM_AVAILABLE(10_10, 8_0)= -997, 
0

我发现这是不是上面记录了新的错误代码: CFNetworkErrorCode -1022

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." 
+0

https://forums.developer.apple.com/thread/5835 ' NSAppTransportSecurity NSAllowsArbitraryLoads ' –

相关问题