自定义 NSError 代码

Posted

技术标签:

【中文标题】自定义 NSError 代码【英文标题】:Custom NSError codes 【发布时间】:2015-04-29 10:13:13 【问题描述】:

我正在构建一个 Cocoa Touch 框架,它使用自定义 NSError 对象将错误传回给调用者。我需要声明一个定义自定义错误代码的枚举。我去了这个Apple doc,它列出了如下所示的 NSURLErrorDomain 错误代码:

enum     
   NSURLErrorUnknown = -1,   
   NSURLErrorCancelled = -999,   
   NSURLErrorBadURL = -1000,    
   NSURLErrorTimedOut = -1001,   
   NSURLErrorUnsupportedURL = -1002,
   NSURLErrorUnsupportedURL = -1002,
   NSURLErrorCannotConnectToHost = -1004,   
   NSURLErrorDataLengthExceedsMaximum = -1103,   
   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,   
   NSURLErrorInternationalRoamingOff = -1018,    
   NSURLErrorCallIsActive = -1019,    
   NSURLErrorDataNotAllowed = -1020,    
   NSURLErrorRequestBodyStreamExhausted = -1021,   
   NSURLErrorFileDoesNotExist = -1100,    
   NSURLErrorFileIsDirectory = -1101,    
   NSURLErrorNoPermissionsToReadFile = -1102,    
   NSURLErrorSecureConnectionFailed = -1200,   
   NSURLErrorServerCertificateHasBadDate = -1201,   
   NSURLErrorServerCertificateUntrusted = -1202,   
   NSURLErrorServerCertificateHasUnknownRoot = -1203,   
   NSURLErrorServerCertificateNotYetValid = -1204,  
   NSURLErrorClientCertificateRejected = -1205,   
   NSURLErrorClientCertificateRequired = -1206,   
   NSURLErrorCannotLoadFromNetwork = -2000,    
   NSURLErrorCannotCreateFile= -3000,   
   NSURLErrorCannotOpenFile = -3001,   
   NSURLErrorCannotCloseFile = -3002,    
   NSURLErrorCannotWriteToFile = -3003,    
   NSURLErrorCannotRemoveFile = -3004,    
   NSURLErrorCannotMoveFile = -3005,   
   NSURLErrorDownloadDecodingFailedMidStream = -3006,   
   NSURLErrorDownloadDecodingFailedToComplete = -3007 
   

第一季度: 为什么 Apple 对错误代码使用负值?有什么具体原因吗?

第二季度: Apple 是否遵循任何模式来随机化错误代码?

【问题讨论】:

【参考方案1】:
    因为基于返回码,0 通常是可以的。这留下了正整数和负整数。 C 语言的一般偏好是使用正整数作为成功代码(带有附加信息)和负值作为错误代码。 如您所见,错误代码已分组。未知和取消是特殊的,1000s 是 HTTP 错误,1100s 是访问错误,1200s 是连接和证书错误,2000 网络,3000s 文件和流问题。

根据问题区域对错误进行分组,并将否定用于返回代码(因为返回否定通常会被解释为错误)。

【讨论】:

你能发布一些关于这个的详细描述的链接吗?那就太好了! @devgr 如果你处理直接请求,一般规则是先遵循standard HTTP status codes,然后使用苹果的下一个,如果最后没有定义,创建你自己的您将错误消息定义为。 Apple 自己并不坚持否定代码,请参阅他们的示例 developer.apple.com/library/content/documentation/Cocoa/… @LeonidUsov 这是一个温和的概括,但总的来说是这样。

以上是关于自定义 NSError 代码的主要内容,如果未能解决你的问题,请参考以下文章

自定义 NSError 奇怪的行为 Swift

Objective-C 在自定义方法中将 NSError 指针传递给 NSFileManager

Swift 3.1:自定义错误转换为 NSError 以访问其域属性时崩溃

创建一个 NSError 域

访问自定义相册

无法解开 NSError