对于崩溃,第一步是使用错误消息和调试器来确定导致问题的呼叫.如果问题是由未捕获的异常引起的,请阅读关于异常处理的 Apple文章.具体答案实际上取决于您的代码以及导致崩溃的确切原因,因此我不会推测特定的解决方案.
至于检测服务器错误响应代码(例如404),这更具体到WebKit.我假设你在iPhone上使用UIWebView,你可能已经注意到没有一个主要方法返回错误.这是因为它使用委托模型异步报告进度或错误.(这是有道理的,因为您不希望您的UI代码受到缓慢加载(或不存在)网页的支配.要获得此类错误的通知,有几个步骤.
采用UIWebViewDelegate
协议,通常在同一个类中启动网页加载以方便使用.
将该对象设置为UIWebView实例的委托.(它有一个delegate
属性,所以你可以使用任何一种uiView.delegate = self
或[uiView setDelegate:self]
基于你喜欢的东西.)
webView:didFailLoadWithError:
在该类中实现该方法.(通过实现也可以在完成加载时通知您webViewDidFinishLoad:
.)这是您包含发生错误时应该发生的事情的逻辑的地方.
我没有看到任何关于通过此委托方法传回的任何特定错误的内容的详细文档,但它是一个标准NSError
对象,我建议通过调用其方法来检查内容,例如-localizedDescription
和-userInfo
.
下面是一些示例代码,为简洁起见,排除了#import语句.
MyClass.h
@interface MyClass : NSObject{ 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