2012-04-13 2 views
0

UIViewControllerのviewDidDisappearでUIWebViewのローカルファイルからコンテンツをリロードしようとしています。 Badaccessがキャッチされます。しかし、私はviewWillDisappearで同じコードを書く場合、それは動作します。 理由は何でしょうか? UIWebViewはコンテンツが表示されていないときにリロードできないと聞いています(わからない)。UIWebView。 ViewDidDisAppearで再ロードするときのBadaccess

私のコード(それは十分でいただければ幸いです):

@interface WebViewController : UIViewController <UIWebViewDelegate> { 
    ExtendedWebView * webView; 
} 
@property (nonatomic, retain) ExtendedWebView * webView; 
@end 

//WebViewController implementation 
- (void)loadView 
{ 
    [super loadView]; 
    WebViewCachingSingleton * webViewSingleton = [WebViewCachingSingleton sharedService]; 
     ExtendedWebView * newWebView = [webViewSingleton getAvailableWebViewResource];//here I get ExtendedWebView. it works =) 
    newWebView.frame = CGRectMake(0, 0, 320, 400); 
    newWebView.delegate = self; 
    [self.view addSubview:newWebView]; 
    self.webView = newWebView; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [[WebViewCachingSingleton sharedService] makeWebViewUnused:self.webView]; 
} 

//WebViewCachingSingleton: 
- (void) makeWebViewUnused : (ExtendedWebView *) aWebView 
{ 
    aWebView.isFree = YES; 
    [aWebView reload]; 
} 

答えて

1

ビューが消えたときにviewDidDisappearが呼び出されるため、すべてのサブビューが解放されるため、機能しません。 viewWillDisappearは、そのビューに関連付けられたすべてのオブジェクトを解放する直前に呼び出されます。

したがって、すでにリリースされているUIWebViewのreloadメソッドを呼び出そうとしています。それが基本的にクラッシュする理由です。

は、それが割り当て解除されていないので、別のシングルトンオブジェクトから参照されている(ExtendedWebViewは、コードを参照)、それは

+0

私のWebViewのに役立ちます願っています。 – Sergey

0

リロードが表示されていない場合でも行うことができます。

私はあなたの状態に置くコードの例を作ろうとしましたが、何の問題もありませんでした。 NSZombieEnabledをデバッグして有効にして、アプリケーションに実際に何が起きているかを確認してください。 私たちがあなたに詳細を知らせるのに役立つコードを投稿してみてください。

関連する問題