2012-06-04 113 views
1

我遇到了一個小問題,我的應用程序。這是一個簡單的問題,但我找不到崩潰的原因。UINavigationcontroller popViewcontroller不能在第二次嘗試

我有一個簡單的ViewController只有一個網頁視圖(創建和故事板鏈接)(啓用ARC):

@implementation BPActivateController 
@synthesize mainWebView; 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 

    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/test.php?code=%@", BASE_URL, [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueIdentifier"]]]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [mainWebView loadRequest:requestObj]; 

    [super viewDidLoad]; 
} 


- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; 
    if ([html rangeOfString:@"<h1>Not Found</h1>"].location != NSNotFound) 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
     NSLog(@"pop the view controller"); 
    } 
} 

- (void)viewDidUnload 
{ 
    [self setMainWebView:nil]; 
    [super viewDidUnload]; 
} 

第一次視圖中打開popViewControllerAnimated被調用,用戶被重定向回最後一個viewcontroller。但是當視圖再次打開時,在調用popViewControllerAnimated之後給我一個EXEC_BAD_ACCESS。當我讓殭屍代碼給我下面的跟蹤:

2012-06-04 11:51:12.717 actusmedicus[410:707] pop the view controller 
2012-06-04 11:51:12.720 actusmedicus[410:707] *** -[BPActivateController respondsToSelector:]: message sent to deallocated instance 0xc6d95b0 

我已經試過幾件事情,但仍然是不明確的是被稱爲什麼選擇。我懷疑webview仍然很忙..

任何人有一個想法,讓我回到正軌?


[編輯]

的EXEC_BAD_ACCESS通過設置web視圖的先nil代表固定的。 但真正的問題仍然存在,第一次將視圖推入UINavigation堆棧時,Web視圖確實會加載,並且在404成功執行popViewControllerAnimated之後。但第二次我們在UINavigation堆棧上推送相同的視圖(與我們第一次相同)popViewControllerAnimated不執行任何操作。我已檢查,如果它是零,但似乎並沒有問題..

我的第一個想法是,它運行在另一個線程和UINavigationcontroller不存在那裏。我在performSelectorOnMainThread的幫助下排除了這種可能性。

最後我添加了一個按鈕來手動調用popViewControllerAnimated,並且每次都有效,所以爲什麼當它以編程方式調用它時不起作用?

回答

0

我懷疑的WebView仍然忙..

如果這樣的話你的dealloc調用stopLoading方法。

您還應該在dealloc中將委託設置爲nil。

+0

在調用popViewControllerAnimated之前,我嘗試了stopLoading方法,但問題仍然存在..該項目是ARC,因此我不必調用dealloc –

+0

將delgate設置爲零修復BAD_ACCESS消息,但真正的問題仍然存在那裏有什麼想法? –

0

確保您是否連續兩次到達目標視圖控制器。在我的情況下,我的代碼發了兩次segue。所以我不得不點擊返回按鈕兩次回到我的主控制器。

相關問題