2011-08-20 9 views
9

私はビューコントローラ(webViewUIWebView型のインスタンス変数)で次のものを持っています:loadViewでself.view.frameにアクセスすると、EXC_BAD_ACCESSがクラッシュする

- (void)loadView 
{ 
    webView = [[UIWebView alloc]initWithFrame:self.view.frame]; 
    [self.view addSubview:webView]; 
} 

Webビューを割り当てる最初の行がクラッシュします。EXC_BAD_ACCESSとコンソール:

警告:以前に選択したフレームを復元できません

クラッシュの原因を理解できません。 self.view.frameは間違いなくCGRectです。

+2

常にクラッシュログを提供する方がよいでしょう。 w/oと言うのは難しいです。 – Anton

+0

コンソールに「警告:以前に選択したフレームを復元できません」と表示されます。 UIWebViewを割り当てたコード行は緑色で強調表示され、 "EXC_BAD_ACCESS"と表示されます。 – Tom

答えて

6

loadViewメソッドを使用しているので、独自のビュー階層を手動で作成する必要があります。

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
self.view = webView; 
[webView release]; 

それとも、loadViewメソッドを使用してスキップして、ちょうどこのようviewDidLoadメソッドでそれを置くことができます::のUIWebViewはUIViewのサブクラスなので、あなただけのこのようなあなたのloadViewメソッドを書くことができ、さらにへ

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
[self.view addSubview:webView]; 
[webView release]; 

アプリケーションがクラッシュする理由、UIViewControllerがインスタンス化されたときにそのビューが正しい方法で作成されていないことについて詳しく説明します。これはレイジーローディングと呼ばれるため、まだ存在しない値にアクセスしようとしています。

+0

webViewのリリースを忘れないでください – progrmr

+0

@progrmrに感謝します。 – ms83

+0

ありがとうございます。 – Tom

6

loadView内でself.viewアクセッサを使用することはできません。セッターのみ使用できます。その理由は、UIViewControllerのviewアクセサメソッドがビューをロードしていて、ロードビューに既に存在しているためビューがロードされているため、無限の再帰的ループが発生するためです。あなたがあなたの代わりにこのようにそれをしたいと思うloadViewメソッドfrom this answerためのパターンに従う場合

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
self.view = webView; 
[webView release]; // don't forget to release 
0

を私はloadViewが呼び出されたときにself.view.frameが存在していないと思います。そのコードをに置くことができます。self.viewが読み込まれ、フレームが分かっています。

1

ビューを作成せずにビューのフレームにアクセスしようとしています。ビューを作成してself.viewに割り当てるか、単に[super loadView]と呼ぶことができます。以下のコードを試してみてください。

- (void)loadView { 

    [super loadView]; 
    webView = [[UIWebView alloc] initWithFrame:self.view.frame]; 
    [self.view addSubview:webView]; 
} 
+0

文書担当者はスーパーブックスを呼び出すことをお勧めします –

+0

@Brad Thomas、Really?私はそうは思わない。 – EmptyStack

+0

https://developer.apple.com/library/ios/Documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#jumpTo_61 –

関連する問題