Tom*_*Tom 9 iphone xcode objective-c ios
我在视图控制器中有以下内容(其中webView是类型的实例变量UIWebView):
- (void)loadView
{
webView = [[UIWebView alloc]initWithFrame:self.view.frame];
[self.view addSubview:webView];
}
Run Code Online (Sandbox Code Playgroud)
第一行,分配Web视图,导致崩溃 - 我在控制台中获得EXC_BAD_ACCESS和消息:
警告:无法恢复以前选择的帧
我不明白什么导致了崩溃; self.view.frame绝对是一个CGRect.
你不能在loadView中使用self.view accessor,你只能使用setter.原因是viewUIViewController 中的访问器方法加载视图(如果它尚未加载),并且由于您已经在loadView(加载视图),它将导致无限递归循环.
如果你按照这个答案的 loadView模式,你会想要这样做:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = webView;
[webView release]; // don't forget to release
Run Code Online (Sandbox Code Playgroud)
由于您使用的是loadView方法,因此必须手动创建自己的视图层次结构.由于UIWebView是UIView的子类,您可以像这样编写loadView方法:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = webView;
[webView release];
Run Code Online (Sandbox Code Playgroud)
或者您可以跳过使用loadView并将其放在viewDidLoad方法中,如下所示:
webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[self.view addSubview:webView];
[webView release];
Run Code Online (Sandbox Code Playgroud)
为了进一步详细说明应用程序崩溃的原因,在实例化UIViewController时,其视图不是正确创建的.这称为延迟加载,因此您尝试访问尚不存在的值.