在iOS中正确使用NSErrorRecoveryAttempting,NSError和UIAlertView是什么?

oro*_*ome 13 error-handling cocoa-touch uialertview nserror ios

我无法找到正确的方法的例子来使用NSError,UIAlertViewNSErrorRecoveryAttempting一起在iOS.我能找到的大多数文档和示例都涵盖了OS X上的等效功能,其中相关行为由Cocoa集成.但是在iOS中,似乎有必要"手工"做到这一点,而且我找不到它如何完成的好例子.

我非常感谢使用NSError中的信息来支持从NSErrors报告给用户的恢复尝试的一些最佳实践示例.

Abh*_*ert 6

根据Apple的文档:

重要提示:NSError类在Mac OS X和iOS上均可用.但是,错误响应程序和错误恢复API和机制仅在Application Kit(Mac OS X)中可用.

所以,我不确定你是否可以使用,NSErrorRecoveryAttempting即使它似乎确实在文档中定义了(看起来这是UIKit文档的一个区域,从AppKit的文档中复制后还没有更新).

以下是我处理代码中错误的方法:

NSError *error = nil;
id result = [SomeClass doSomething:&error];

if (!result) {
    NSLog(@"Do something failed: %@", error);
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Something failed!" message:@"There was an error doing something." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
    [alert show];
    return;
}
Run Code Online (Sandbox Code Playgroud)

  • 由于NSErrorRecoveryAttempting是一种非正式协议,因此对象要符合的所有内容都是实现这两种方法.iOS上的NSError肯定包含必要的属性和常量.Apple的评论显然只是指[在这里](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorRespondRecover/ErrorRespondRecover.html)和[here]所描述的特定appkit方法( http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ErrorHandlingCocoa/HandleReceivedError/HandleReceivedError.html). (2认同)