我有一些Objective-C遗留代码,它声明了类似的方法
- (void)doSomethingWithArgument:(ArgType)argument error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
Swift会自动将产生错误的Objective-C方法转换为根据Swift的本机错误处理功能引发错误的方法.
但在我的项目中描述的方法如下所示:
object.doSomething(argument: ArgType, error: NSErrorPointer)
Run Code Online (Sandbox Code Playgroud)
此外,当我尝试使用它们时,它会抛出运行时异常:
let errorPtr = NSErrorPointer()
object.doSomething(argumentValue, error: errorPtr)
Run Code Online (Sandbox Code Playgroud)
我还需要更多东西来将Objective-C"NSError**"方法转换为Swift"trows"方法吗?
我在移动测试应用程序的Xcode 8 Beta中5和转换我的代码斯威夫特3.我离开了我与有关开关的一些错误Error的NSError.我在Xcode中得到一个错误,'Value of type 'Error' has no member 'code'.我仍然可以使用localizedDescription.是code不再内的值Error或者是它只是一个错误在Xcode?
我想在收到HTTP错误404等时通知用户.我怎么能检测出来?我已经尝试过了
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)
但是当我收到404错误时它没有被调用.
问题是当数据不完整NSJSONSerialization.JSONObjectWithData导致应用程序崩溃unexpectedly found nil while unwrapping an Optional value而不是通知我们使用NSError变量时.所以我们无法阻止崩溃.
您可以在下面找到我们正在使用的代码
var error:NSError? = nil
let dataToUse = NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.AllowFragments, error:&error) as NSDictionary
if error != nil { println( "There was an error in NSJSONSerialization") }
Run Code Online (Sandbox Code Playgroud)
直到现在我们都无法找到解决方法.
我正在使用CoreLocation来成功确定用户的位置.但是,当我尝试使用CLLocationManagerDelegate方法时:
func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)
Run Code Online (Sandbox Code Playgroud)
我遇到了错误术语的问题.
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("didFailWithError \(error)")
if let err = error {
if err.code == kCLErrorLocationUnknown {
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致"使用未解析的标识符kCLErrorLocationUnknown"错误消息.我知道kCLErrors是枚举,并且它们已经在Swift中进化但我被卡住了.
NSError需要一个域,我理解它可以分割错误代码的范围.
人们会预料到某个地方存在domain.error代码的注册表,但我无法发现它.
据说这可以用于查找错误的本地化描述.
有没有人有任何已知的最佳实践来处理错误域和代码?权威参考(主要开发人员或框架制造商)是最佳的,但即使是详细描述良好惯例的博客也是有用的.
在您的项目中,您是否维护错误域/代码的注册表,这些注册表映射到基于域/代码的错误对象的本地化描述,恢复,众所周知的userinfo密钥或类似工厂?
或者你通常只是拼凑一些域和一些代码,并依赖于众所周知的用户信息密钥,如NSLocalizedDescriptionKey等,在你的定制NSError域?
我无法找到正确的方法的例子来使用NSError,UIAlertView和NSErrorRecoveryAttempting一起在iOS.我能找到的大多数文档和示例都涵盖了OS X上的等效功能,其中相关行为由Cocoa集成.但是在iOS中,似乎有必要"手工"做到这一点,而且我找不到它如何完成的好例子.
我非常感谢使用NSError中的信息来支持从NSErrors报告给用户的恢复尝试的一些最佳实践示例.
我想从中获得一些有用的信息NSError.如果我打印出来[error userInfo],我会得到以下信息:
{
NSFilePath = "/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/08260B6A-4D65-48DF-ADD1-FFC8750081E8/Documents/abc";
NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=17 \"The operation couldn\U2019t be completed. File exists\"";
}
Run Code Online (Sandbox Code Playgroud)
我想显示最后一行:"文件存在",但我怎么能把它拿出来?
我试过了:
localizedDescription
localizedFailureReason
localizedRecoverySuggestion
localizedRecoveryOptions
recoveryAttempter
Run Code Online (Sandbox Code Playgroud)
其中没有显示"文件存在".
您是否知道NSError在实例化之后是否有一种很好的方法来设置/修改localgedcription,而不是重新创建它?我没找到任何.
现在使用Swift标记了一些函数throws,这迫使开发人员在do - try catch块内调用函数.但是开发人员如何知道该函数抛出的不同异常列表?
作为参考,这是一行Java代码:
static void employeeAge(int age) throws MyExceptionA,MyExceptionB
Run Code Online (Sandbox Code Playgroud)
很明显,例外是2 MyExceptionA,MyExceptionB并且开发人员可以决定采取不同的行动取决于错误.
我们可以在Swift上实现同样的目标吗?
nserror ×10
ios ×7
swift ×5
cocoa-touch ×3
objective-c ×3
cocoa ×2
ios8 ×1
iphone ×1
swift3 ×1
uialertview ×1
uiwebview ×1
xcode8 ×1