0

UIViewControllerのviewDidDisappearでUIWebViewのローカルファイルからコンテンツをリロードしようとしています。Badaccessがキャッチされました。しかし、viewWillDisappearで同じコードを書くと、機能します。理由は何でしょうか?UIWebViewが表示されていない場合(内容がわからない場合)、コンテンツを再読み込みできないと聞いたことがあります。

私のコード(それで十分だといいのですが):

@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];
}
4

2 に答える 2

1

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

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

それが役に立てば幸い

于 2012-04-13T10:05:40.180 に答える
0

表示されていなくてもリロードできます。

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

于 2012-04-13T10:01:44.160 に答える