I have the following in a view controller (where webView
is an instance variable of type UIWebView
):
- (void)loadView
{
webView = [[UIWebView alloc]initWithFrame:self.view.frame];
[self.view addSubview:webView];
}
The first line, allocating the web view, causes a crash -- I get EXC_BAD_ACCESS and a message in the console:
Warning: Unable to restore previously selected frame
I don't understand whats causing the crash; self.view.frame
is definitely a CGRect
.
You can't use self.view
accessor inside loadView, you can only use the setter. The reason is that the view
accessor method in a UIViewController loads the view (if it isn't already loaded) and since you are already in loadView (loading the view) it will cause an infinite recursive loop.
If you follow the pattern for loadView from this answer you would want to do it like this instead:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = webView;
[webView release]; // don't forget to release
Since you're using the loadView method you have to manually create your own view hierarchy. Since UIWebView is a subclass of UIView you could just write your loadView method like this:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = webView;
[webView release];
Or you could skip using loadView and just place it in the viewDidLoad method like this:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[self.view addSubview:webView];
[webView release];
To further elaborate on why your application is crashing, when a UIViewController is instantiated its view is not created right way. This is called lazy loading, so you are trying to access a value that doesn't exist yet.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With