我创建了一个NSObject类并包含在init i中创建一个uiwebview,将委托设置为self并发送加载请求。
由于某种原因,webViewDidFinishLoad或didFailLoadWithError永远不会被触发。我无法理解为什么。
//
// RXBTest.h
#import <Foundation/Foundation.h>
@interface RXBTest : NSObject <UIWebViewDelegate>
@end
// RXBTest.m
// pageTest
#import "RXBTest.h"
@implementation RXBTest
- (id) init
{
if((self=[super init])){
UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
[webView setDelegate:self];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];
}
return self;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"ERROR LOADING WEBPAGE: %@", error);
}
- (void) webViewDidFinishLoad:(UIWebView*)webView
{
NSLog(@"finished");
}
@end
任何人都有任何想法?
感谢 鲁迪
答案 0 :(得分:5)
如果您使用的是ARC,那么问题是您的webView
变量是init
方法的本地变量,因此在Web视图完成加载之前会被取消分配。尝试将Web视图添加为实例变量:
@interface RXBTest : NSObject <UIWebViewDelegate>
{
UIWebView* webView;
}
@end
@implementation RXBTest
- (id) init
{
if((self=[super init])){
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
[webView setDelegate:self];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];
}
return self;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"ERROR LOADING WEBPAGE: %@", error);
}
- (void) webViewDidFinishLoad:(UIWebView*)webView
{
NSLog(@"finished");
}
@end
如果您不使用ARC,则需要记住在dealloc方法中释放webView
对象。
答案 1 :(得分:2)
您忘了在头文件(.h)中添加它:
#import <UIKit/UIWebView.h>