objective-c - Objective-C 中的异常/错误处理(iPhone 应用程序)

标签 objective-c iphone exception-handling delegates webkit

关于我正在制作的 iPhone 应用程序中的异常/错误处理,我实际上有两个问题:

  1. 该应用程序使用互联网,但当没有连接时,该应用程序就会死掉(在启动期间)。我该如何处理这个问题以向用户打印一些信息消息,而不是被扔回跳板?

  2. 谁能告诉我如何处理“页面未找到”或“未与服务器联系”等错误的示例,这样我就可以按照与上述相同的方式向用户提供某种信息?

最佳答案

对于崩溃,第一步是使用错误消息和调试器找出导致问题的调用。如果问题是由未捕获的异常引起的,请阅读这篇关于 exception handling 的 Apple 文章.具体答案实际上取决于您的代码以及导致崩溃的确切原因,因此我不会推测特定的解决方案。

就检测服务器错误响应代码(如 404)而言,它更特定于 WebKit。我假设你正在使用 UIWebView在 iPhone 上,您可能已经注意到所有主要方法都不会返回错误。这是因为它使用委托(delegate)模型来异步报告进度或错误。 (这是有道理的,因为您不希望您的 UI 代码受加载缓慢(或不存在)网页的支配。要收到此类错误的通知,需要几个步骤。

  1. 采用UIWebViewDelegate协议(protocol),通常在同一个类中,为方便起见将启动网页加载。
  2. 将该对象设置为 UIWebView 实例的委托(delegate)。 (它有一个 delegate 属性,因此您可以使用类似 uiView.delegate = self[uiView setDelegate :self] 根据您的喜好。)
  3. 实现webView:didFailLoadWithError:该类中的方法。 (您也可以通过实现 webViewDidFinishLoad: 在加载完成时收到通知。)这是您包含发生错误时应该发生的逻辑的地方。

我没有看到关于通过此委托(delegate)方法返回的任何特定错误内容的任何详细文档,但它是一个标准 NSError对象,我建议通过调用它的方法来检查内容,例如 -localizedDescription-userInfo

这里是一些示例代码,为简洁起见排除了#import 语句。

MyClass.h

@interface MyClass : NSObject <UIWebViewDelegate> {
  IBOutlet UIWebView* myWebView;
}
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError *)error;
@end

MyClass.m

@implementation MyClass
- (id) init {
  if ((self = [super init]) == nil)
    return nil;
  // initialize myWebView
  myWebView.delegate = self;
  return self;
}

- (void) webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error {
  ...
}
@end

关于objective-c - Objective-C 中的异常/错误处理(iPhone 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086909/

相关文章:

ios - 具有连续 UILabel 的 iPhone 自定义单元格

ios - 获取内存不足崩溃的通知

ios - 使用 objc_setAssociated 和 objc_getAssociated 的条件

ios - 输入电话号码后编辑无法正常工作

iphone - UIScrollView 在 iOS 7 StoryBoard 中不滚动

c# - Ninject WithConstructorArgument : No matching bindings are available, 并且该类型不可自绑定(bind)

iphone - 我可以从我的 iPhone 应用程序测试人员那里获取控制台日志吗?

iPhone/iPod Touch : application executable contains unsupported architecture(s): armv7s (-19031)

c# - Service Fabric 未处理的异常和最佳实践

.net - 复制到其他计算机时无法在 WcfTestClient 中添加服务