我正在尝试使用UIWebViewDelegate,但是,当我将委托设置为自己的时候,我收到一条'消息已发送到解除分配的实例'错误。
实际错误:“2014-04-07 22:12:05.402 AppName[746:60b] -[WebViewController respondsToSelector:]: message sent to deallocated instance 0xa47ae00"
我认为这是因为没有保留WebViewController实例?
有人能指出我正确的方向吗?
我的结构是: RootViewController> WebViewController(委托)> web视图
// root.h
@interface RootViewController : UIViewController
@property (strong, nonatomic) WebViewController * webViewController;
@end
// root.m
#import "RootViewController.h"
#import <UIKit/UIKit.h>
#import "WebViewController.h"
@interface RootViewController ()
@end
@implementation RootViewController
- (void)viewDidLoad
{
_webViewController = [[WebViewController alloc] init];
[self.view addSubview:_webViewController.view];
}
@end
// .h
#import <UIKit/UIKit.h>
@interface WebViewController : UIViewController <UIWebViewDelegate>
@property(strong) UIWebView *webView;
@end
// .m
#import "WebViewController.h"
@interface WebViewController ()
@end
@implementation WebViewController
- (void)viewDidLoad
{
_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
_webView.delegate = self;
NSString *url = @"http://google.com/";
NSURL *nsurl = [NSURL URLWithString:url];
NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl];
[_webView loadRequest:nsrequest];
[self.view addSubview:_webView];
}
-(void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"ui web view started load");
}
答案 0 :(得分:1)
尝试将您的代码从loadView
移到viewDidLoad
,然后移除您对loadView
的来电。我相信在实例化和显示视图控制器时会自动调用loadView
,因此再次调用它可能会导致您实例化webview两次。
来自文档:
你永远不应该直接调用这个方法。视图控制器调用 请求view属性但当前为nil时此方法。 此方法加载或创建视图并将其分配给视图 属性。
答案 1 :(得分:0)
我没有像这样设置根视图控制器:
self.window.rootViewController = rootController;