2012-04-13 3 views
0

UIViewController의 viewDidDisappear에서 UIWebView의 로컬 파일에서 내용을 다시로드하려고합니다. Badaccess가 잡혔습니다. 그러나 viewWillDisappear에서 같은 코드를 작성하면 작동합니다. 그 이유는 무엇일까요? UIWebView가 보이지 않을 때 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

view가 사라지면 viewDidDisappear가 호출되어 모든 하위 뷰가 해제되므로이 기능이 작동하지 않습니다. viewWillDisappear는 해당 뷰와 연관된 모든 객체를 해제하기 전에 호출됩니다.

그래서 이미 릴리스 된 UIWebView의 reload 메서드를 호출하려고합니다. 그것이 기본적으로 충돌하는 이유입니다.

는 할당이 해제되지 않도록, 또 다른 싱글 톤 객체에서 참조 (ExtendedWebView이 코드를 참조)가

+0

내 웹보기를 도움이되기를 바랍니다. – Sergey

0

다시로드가 표시되지 않는 경우에도 수행 할 수 있습니다.

나는 당신의 상태에 넣기 위하여 부호의보기를 만들 것을 시도하고 아무 문제도 없었다. NSZombieEnabled를 디버그하고 활성화하여 응용 프로그램에 실제로 발생하는 것을 확인하십시오. 자세한 내용을 알려주는 코드를 게시하십시오.

관련 문제